jsc_020

JavaScript のゲームプログラミング入門

2. 四角を動かしてみよう

 

前回のプログラムを見てみましょう。
(説明のため、左側に行番号を表示しています)

JavaScript で書かれた17から20行目までを説明します。
背景を青っぽく変えた部分です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8" />
    <title>はじめてのプログラミング</title>
    <script src="crafty-min.js"></script>
    <style type="text/css">
        body{
            padding:0px;
            margin:0px;
        }
    </style>
</head>
<body>
    <div id="game"></div>
    <script>
        Crafty.init(500,400, document.getElementById('game'));
        Crafty.background('#87ceeb');
        Crafty.e('2D, Canvas, Color')
            .attr({x:0, y:0, w:100, h:100}).color('#f00');
    </script>
</body>
</html>

 

Crafty.initは初期処理です。

描画エリアのサイズと、HTMLとの関係を作っています。
名前を game としていますが、好きな名前でかまいません。

craftyjsの初期化

Crafty.backgroundは背景色の指定です。

 

描画エリアのサイズは、横 500(x軸)、縦 400(y軸)。
背景色は 16 進数カラーコードを使っています。

描画エリアのサイズと背景色

 

 

赤い四角は 19、20 行目で表示しています。

四角の表示方法

 

オブジェクトを作りたいときにはCrafty.eを使います。
カッコの中の 2D と Canvas はそのまま覚えてください。
Color は四角に色をつけるためのものです。

attrでは、表示座標と幅、高さを指定しています。
表示位置は x:0, y:0 ですから左上になります。
描画エリアの原点座標が左上だからです。

幅が w、高さが h です。これは何となく分かりますよね。

 

 

四角を増やしてみよう

表示する四角を3つに増やしてみましょう。

script タグで囲まれた部分のみを、つぎのように変更してください。
入力ミスを避けるため、コピー&ペーストで変更しましょう。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8" />
    <title>はじめてのプログラミング</title>
    <script src="crafty-min.js"></script>
    <style type="text/css">
        body{
            padding:0px;
            margin:0px;
        }
    </style>
</head>
<body>
    <div id="game"></div>
    <script>
        Crafty.init(500,400, document.getElementById('game'));
        Crafty.background('#87ceeb');
        Crafty.e('2D, Canvas, Color')
            .attr({x:0, y:0, w:100, h:100}).color('#f00');
        Crafty.e('2D, Canvas, Color')
            .attr({x:100, y:100, w:50, h:50}).color('#0f0');
        Crafty.e('2D, Canvas, Color')
            .attr({x:200, y:100, w:100, h:100}).color('#00f');
    </script>
</body>
</html>

変更したらファイルを保存してください。

 

実行結果を見るため、ブラウザのページを再読み込みします。
次のところをクリックしましょう。

ブラウザのページを再読み込み

再読み込みに興味があるならchrome 再読み込みで検索してみましょう。

 

次のように四角が3つ表示されたら成功です。

3つの四角を表示

 

表示座標を見てみましょう。
原点 (0,0) は左上です。赤い四角は x:0 y:0 なので原点から表示されます。
オブジェクトの描画基点が左上なので、このような表示になります。

四角の表示座標を確認する

緑と青の四角は y:100 なので同じ高さに表示されます。
これを見ても描画基点が左上だと分かりますね。

 

色(カラーコード)の指定は、2つの方法を使っています。
背景色では 6桁の 16進数で指定してます。

Crafty.background('#87ceeb');

四角は 3桁の 16進数で指定してます。

Crafty.e('2D, Canvas, Color')
    .attr({x:0, y:0, w:100, h:100}).color('#f00');
Crafty.e('2D, Canvas, Color')
    .attr({x:100, y:100, w:50, h:50}).color('#0f0');
Crafty.e('2D, Canvas, Color')
    .attr({x:200, y:100, w:100, h:100}).color('#00f');

実はどちらでも使えます。
当然 3桁は色数が少なくなります。

一度はカラーコードで検索してみてください。
3桁を調べたいならカラーコード 3桁で検索します。

 

 

表示の優先順位とは

複数のオブジェクトを表示するとき、表示優先を意識する必要があります。
オブジェクトが重なれば、その部分は見えなくなるからです。

ゲーム作りでは重要なポイントです。
表示優先を上手く使うことで、リアルな感じが出てきますからね。

とは言え、まだ初心者ですから基本だけ説明します。

 

プログラムを次のように変更しましょう。
これからは変更付近のみ表示するので気を付けてください。

    Crafty.init(500,400, document.getElementById('game'));
    Crafty.background('#87ceeb');
    Crafty.e('2D, Canvas, Color')
        .attr({x:0, y:0, w:100, h:100}).color('#f00');  // 赤
    Crafty.e('2D, Canvas, Color')
        .attr({x:50, y:50, w:100, h:100}).color('#0f0');  // 緑
    Crafty.e('2D, Canvas, Color')
        .attr({x:100, y:100, w:100, h:100}).color('#00f');  // 青

ダブルスラッシュ(//)はコメントです。// より右側は実行されず無視されます。
このようにコメントを書けば、どこが何色なのかすぐに分かりますね。

 

プログラムを保存して、ページを再読み込みすれば次のように表示されます。

四角を重ねて表示する

赤の上に緑、その上に青が表示されています。
つまり、表示優先は赤、緑、青の順に高くなります。

 

プログラムを見ると、先に実行されたものは表示優先が低く、後に実行されるほど表示優先が高いことが分かります。

処理する順番で表示優先を変える、これが基本です。

ただ、この方法だけでは処理しきれない時もあります。
そのときは専用の仕組みを使います。(自作することもあります)

 

 

左右に動かしてみよう

四角を1つ表示して、キーボードから操作できるようにします。

コピー&ペーストでプログラムを書き換えましょう。

    Crafty.init(500,400, document.getElementById('game'));
    Crafty.background('#87ceeb');
    Crafty.e('2D, Canvas, Color, Twoway')
        .attr({x:220, y:50, w:50, h:50}).color('#f00')
        .twoway(200);

 

保存してページを再読み込みすると次の表示になります。

左右のカーソルキーを押してみてください。
押した方向へ移動しますよ。

四角を左右に動かす

Aキー、または、Dキーを押しても移動します。やってみましょう。

 

オブジェクトの移動はTwowayを入れることで可能になります。

twowayを追加する

 

このとき.twoway(200)で移動速度を指定します。
数値を 100 にすればゆっくり動き、300 にすれば早く動きます。

Twoway と twoway、文字の先頭が大文字・小文字と違うことに注意です。

 

 

重力をつけてみよう

四角に重力をつけてみます。
重力というのは、下に引っ張る力のことです。

次のように変更しましょう。

    Crafty.init(500,400, document.getElementById('game'));
    Crafty.background('#87ceeb');
    Crafty.e('2D, Canvas, Color, Twoway, Gravity')
        .attr({x:220, y:50, w:50, h:50}).color('#f00')
        .gravity()
        .twoway(200);

 

ページを更新(再読み込み)すると四角が落下します。
すぐに見えなくなるので、何度か更新して確かめましょう。

四角に重力がかかり落下する

 

重力はGravityを入れることで可能になります。

Gravityを追加する

 

 

簡単に重力がつきましたね。
しかし「下に移動しているだけじゃん」という感じです。
そこで地面を追加してみます。

    Crafty.init(500,400, document.getElementById('game'));
    Crafty.background('#87ceeb');
    Crafty.e('2D, Canvas, Color, Twoway, Gravity')
        .attr({x:220, y:50, w:50, h:50}).color('#f00')
        .gravity('Floor')
        .twoway(200);
    Crafty.e('Floor, 2D, Canvas, Color')
        .attr({x:50, y:360, w:400, h:20}).color('#00f');

 

ページを更新すると、四角は落下しますが、青い長方形の上に止まります。

落下する四角が地面で止まる

 

左右キーを押してみてください。左右に移動できます。
上キーを押してみましょう(Wキーでも可)。ジャンプもできますよ。
ジャンプしながら左右に動かすこともできます。
これなら重力を感じられると思います。

左右キーで横移動、上キーでジャンプ

 

青の長方形には Floor という名前をつけました。(名前は任意です)
.gravity(‘Floor’) とすることで Floor のオブジェクトを地面にすることができます。

gravityに名前を渡して関連付けする

 

 

さてさて、ゲーム作りとしては、はじめの一歩という感じでした。
これから学ぶことは多くありますが、ゆっくり進めていきましょう。