前回は、scaleとrotateアクションについてご紹介させて頂きました。
cocos2d-htmlを使用しブロック崩しを作成していきます。
作成までの説明が長くなるため、記事を数回に分け説明させて頂きます。
今回は、ブロック崩しのレイアウトの作成についてです。
背景・ブロック・弾・バーの4種類の配置及び表示まで行います。
画面サイズは 320 * 380 とします。
使用する画像サイズ一覧です。
背景 :320 * 380
ブロック: 40 * 20
弾 : 11 * 11
バー : 60 * 8
作成に入る前に、”main.js”ファイルを編集して画面サイズの変更を行います。
※Cocos2d-html-v2.2.1
┗HelloHTML5World
┗main.js
以下のように変更してください。
- //変更前
- cc.EGLView.getInstance().setDesignResolutionSize(800, 450, cc.RESOLUTION_POLICY.SHOW_ALL);
- //変更後
- cc.EGLView.getInstance().setDesignResolutionSize(320, 380, cc.RESOLUTION_POLICY.SHOW_ALL);
これで画面サイズが 320 * 380 に変更出来ました。
それでは作成に入ります。
“myApp.js”ファイルを以下のように変更してください。
※Cocos2d-html-v2.2.1
┗HelloHTML5World
┗src
┗myApp.js
- /**
- *ブロック関連
- */
- //ブロックのsprite
- var spr_block = new Array();
- /**
- * 弾関連
- */
- //弾の幅
- var BALL_WIDTH = 5;
- //弾の高さ
- var BALL_HEIGHT = 5;
- //弾のsprite
- var spr_ball = null;
- /**
- * box2d バー関連
- */
- //バーのY座標位置
- var BAR_Y = 20;
- //バーの幅
- var BAR_WIDTH = 60;
- //バーの高さ
- var BAR_HEIGHT = 4;
- //バーのsprite
- var spr_bar = null;
- var Helloworld = cc.Layer.extend({
- init:function () {
- this._super();
- var size = cc.Director.getInstance().getWinSize();
- //layerの生成
- var lazyLayer = new cc.Layer.create();
- this.addChild(lazyLayer);
- //背景spriteの生成
- var sprite = cc.Sprite.create( “res/bg.png” );
- sprite.setPosition(cc.p( size.width / 2, size.height / 2 ) );
- sprite.setScale( 1.0 );
- lazyLayer.addChild( sprite, 0 );
- //バーspriteの生成
- spr_bar = cc.Sprite.create( “res/bar.png” );
- spr_bar.setPosition( cc.p( size.width / 2 – 5, BAR_Y ) );
- this.addChild( spr_bar, 0 );
- //ボールspriteの生成
- spr_ball = cc.Sprite.create( “res/boll.png” );
- spr_ball.setPosition( cc.p( size.width / 2 – 5, BAR_Y + BAR_HEIGHT + BALL_HEIGHT ) );
- this.addChild( spr_ball, 0 );
- //ブロックの生成
- var h_size = 0;
- for( var i = 0; i < 5; i++ ){
- for( var j = 0; j < 8; j++ ){
- spr_block[i * 8 + j] = cc.Sprite.create( “res/block_2.png” );
- spr_block[i * 8 + j].setPosition( cc.p( 20 + ( j * 40 ), 370 – h_size) );
- spr_block[i * 8 + j].setScale( 1.0 );
- this.addChild( spr_block[i * 8 + j], 0 );
- }
- h_size += 20;
- }
- return true;
- },
- });
- var HelloWorldScene = cc.Scene.extend({
- onEnter:function () {
- this._super();
- layer = new Helloworld();
- layer.init();
- this.addChild(layer);
- }
- });
1~32行でsprite関連の変数を定義し
実際にspriteの生成や配置を行っているのは 50~72行になります。
これで全てのspriteの配置が終わりました。
実行すると以下のように表示されると思います。

少し寂しいので、ゲーム感を出すために
実行時に”GameStart”を表示するよう処理を追加しましょう。
- //Spriteの生成
- var startSprite = cc.Sprite.create(“res/gamestart.png”);
- startSprite.setPosition(cc.p( size.width / 2, size.height / 2 ));
- layer.addChild(startSprite, 7);
- //フェードインの設定
- var actionFadeIn = cc.FadeIn.create(0.5);
- //Delayの設定
- var actionDelay = cc.DelayTime.create(1);
- //フェードアウトの設定
- var actionFadeOut = cc.FadeOut.create(0.5);
- //コールバックの設定
- var actionCb = cc.CallFunc.create(function () {
- layer.removeChild(startSprite);
- },layer);
- //シーケンスの設定
- var actionSeq = cc.Sequence.create(actionFadeIn, actionDelay, actionFadeOut, actionCb);
- //アクション開始
- startSprite.runAction(actionSeq);
2~4行でGameStartのspriteを生成し
7~18行でアクションの設定をしています。
21行目にある cc.Sequence.create() は引数にアクションを指定すると
指定した順番にアクションを実行するように設定することが出来るCCActionです。
その後、24行目でstartSpriteが先ほど生成したSequenceを実行しています。
cc.Sequence.createを、今回を例に説明しますと
create(actionFadeIn, actionDelay, actionFadeOut, actionCb)
となっているので
0.5秒かけてフェードイン
↓
1秒間ディレイ
↓
0.5秒かけてフェードアウト
↓
コールバック関数内のremoveChildによってstartSpriteを消去
という処理フローになります。
それでは上記の処理をブロックsprite配置のfor文の後に追記します。
- /**
- *ブロック関連
- */
- //ブロックのsprite
- var spr_block = new Array();
- /**
- * 弾関連
- */
- //弾の幅
- var BALL_WIDTH = 5;
- //弾の高さ
- var BALL_HEIGHT = 5;
- //弾のsprite
- var spr_ball = null;
- /**
- * box2d バー関連
- */
- //バーのY座標位置
- var BAR_Y = 20;
- //バーの幅
- var BAR_WIDTH = 60;
- //バーの高さ
- var BAR_HEIGHT = 4;
- //バーのsprite
- var spr_bar = null;
- var Helloworld = cc.Layer.extend({
- init:function () {
- this._super();
- var size = cc.Director.getInstance().getWinSize();
- //layerの生成
- var lazyLayer = new cc.Layer.create();
- this.addChild(lazyLayer);
- //背景spriteの生成
- var sprite = cc.Sprite.create( “res/bg.png” );
- sprite.setPosition(cc.p( size.width / 2, size.height / 2 ) );
- sprite.setScale( 1.0 );
- lazyLayer.addChild( sprite, 0 );
- //バーspriteの生成
- spr_bar = cc.Sprite.create( “res/bar.png” );
- spr_bar.setPosition( cc.p( size.width / 2 – 5, BAR_Y ) );
- this.addChild( spr_bar, 0 );
- //ボールspriteの生成
- spr_ball = cc.Sprite.create( “res/boll.png” );
- spr_ball.setPosition( cc.p( size.width / 2 – 5, BAR_Y + BAR_HEIGHT + BALL_HEIGHT ) );
- this.addChild( spr_ball, 0 );
- //ブロックの生成
- var h_size = 0;
- for( var i = 0; i < 5; i++ ){
- for( var j = 0; j < 8; j++ ){
- spr_block[i * 8 + j] = cc.Sprite.create( “res/block_2.png” );
- spr_block[i * 8 + j].setPosition( cc.p( 20 + ( j * 40 ), 370 – h_size) );
- spr_block[i * 8 + j].setScale( 1.0 );
- this.addChild( spr_block[i * 8 + j], 0 );
- }
- h_size += 20;
- }
- //Spriteの生成
- var startSprite = cc.Sprite.create(“res/gamestart.png”);
- startSprite.setPosition(cc.p( size.width / 2, size.height / 2 ));
- layer.addChild(startSprite, 7);
- //フェードインの設定
- var actionFadeIn = cc.FadeIn.create(0.5);
- //Delayの設定
- var actionDelay = cc.DelayTime.create(1);
- //フェードアウトの設定
- var actionFadeOut = cc.FadeOut.create(0.5);
- //コールバックの設定
- var actionCb = cc.CallFunc.create(function () {
- layer.removeChild(startSprite);
- },layer);
- //シーケンスの設定
- var actionSeq = cc.Sequence.create(actionFadeIn, actionDelay, actionFadeOut, actionCb);
- //アクション開始
- startSprite.runAction(actionSeq);
- return true;
- },
- });
- var HelloWorldScene = cc.Scene.extend({
- onEnter:function () {
- this._super();
- layer = new Helloworld();
- layer.init();
- this.addChild(layer);
- }
- });

以上でレイアウト作成は終了です。
<次回以降の更新について>
次回は、タッチ関連の関数及び、ドラッグによるバーの移動処理の追加を行いたいと思います。