*

SampleGameソースコードの説明

公開日: : 未分類

こんばんわmk18です。

今回よりcocos2d-xの内容に入って行きます。

SimpleGameは大変良いサンプルなので、ソースコードを全部覚えるぐらいの勢いで何度もソースコードを読み返して下さい。

SimpleGameが完全に理解できれば、cocos2d-xの7割は理解出来たことになります。

アプリ起動後からシーンの表示まで

座標を決めている所は、後回しにしてアプリが起動してシーンが表示されるまでのソースを見てみましょう。

アプリ起動後、AppDelegate::applicationDidFinishLaunching()が実行され、CCScene *pScene = HelloWorld::scene(); でシーンを作り、pDirector->runWithScene(pScene);でシーンを表示し ます。

画面にはHelloWorldが表示されます。

HelloWorld::scene()でシーンを実体化して、シーンを表示することを理解して下さい。

HelloWorld::scene()でポインターが返ります、このポインターがシーンの実体です。

いまから作るゲームの画面とCCSceneは1:1に対応します。

スタート画面、プレイ画面、リザルト画面、ランキング画面、設定画面、など画面と名前が付くものはCCSceneとして実装します。

シーンの初期化

CCScene* HelloWorld::scene()を実行するとシーンが作られます。

シーンはレイヤを持つので、HelloWorld::create();とかあって複雑ですが、シーンの初期化は自分が持つべきレイヤーを初期化して自分にアドするという感じです。

scene = CCScene::create();

HelloWorld *layer = HelloWorld::create();

と2つのcreateが出てきますが、create()の中でnewとinit()の実行をしています。

cocos2d-xでは実体化する時は、すべてcreate()を使います。

イベントの登録

this->schedule( schedule_selector(HelloWorld::updateGame) );

で毎フレーム(1秒間に60回)実行するメソッドHelloWorld::updateGameを登録します。

登録後は毎フレームvoid HelloWorld::updateGame(float dt)

が実行され、ゲームの当たり判定の処理を行います。

ゲームアプリでは毎フレームの当たり判定とタッチイベントでゲーム世界に変化を与えてゲームが進みます。

毎フレームの処理

2つのループで当たり判定を行い、当たっていたらtargetsToDelete->addObject(target);して、ターゲットを削除する配列に追加します。

1つ目のループ CCARRAY_FOREACH(_projectiles, it)

2つ目のループ CCARRAY_FOREACH(_targets, jt)

シューティングゲームの当たり判定は、弾と敵(ターゲット)総当りすることで実現します。

総当りするために2重ループになっています。

_projectilesと_targetsには何が入るかは、各自で調べ理解して下さい。

 タッチイベントの処理

HelloWorld::ccTouchesEndedはAndroidでいうところのMotionEvent.ACTION_UPと同じで画面から指を放した時に発生する

イベントです。

このイベントが発生した時に、弾を出しています。

実際に弾の動きが開始するのは以下のrunActionを実行した後です。

ちょっと複雑ですが、頑張って理解して下さい。

登録してるコールバックHelloWorld::spriteMoveFinishedでゲームオーバーを判定しています。

projectile->runAction( CCSequence::create(

CCMoveTo::create(realMoveDuration, realDest),

CCCallFuncN::create(this,

callfuncN_selector(HelloWorld::spriteMoveFinished)),

ゲームの動作について

ゲームアプリをモデル化して、ゲーム中のイベントとその処理を整理すると以下のようになります。

毎フレーム => 当たり判定と得点計算

タッチ => 弾を出す

敵が突破した => ゲーム終了処理、負けた

特定が一定以上入った => ゲーム終了処理、 勝った

課題

SimpleGameのすべてのイベントとイベントが発生した時の処理を表にして下さい。

表の形式は各自で考えて下さい。

ゲームの要素を理解する上で、発生するイベントとその結果どうなるか?を仕様として書き出しその後、その仕様がどのように実装されているのか?を理解して下さい。

ロードマップ(今後の予定)

C++の勉強方法について

cocos2-xの環境構築とサンプルの実行

SampleGameソースコードの説明 ←いまここ

OpenGLとテクスチャの理解

CCScene、CCLayer、CCSpriteについて

SimpleGameの機能追加

cocos2-xの座標と画像ファイル

CCSpriteとTexture Packer について

私が作っているアプリ

はぴホム! 〜 探索錬金アドベンチャー 〜

だいたい毎日、1起動あたり1円の収益があります。

1ダウンロード当たりだと50円の収益です。

DAUは2000ぐらいです。

広告は4箇所に貼っています。

関連記事

no image

OpenGLとテクスチャの理解

こんばんわmk18です。 cocos2d-xはOpenGLという技術を使って描画しています。 c

記事を読む

no image

CCScene、CCLayer、CCSpriteについて

こんばんわmk18です。 今回は、画面に表示されるクラスについて説明します。 CCScene

記事を読む

no image

原宿cocos2d-xゲームアプリ塾(仮称)#0の説明資料

最終目標について このアプリ塾(改め、ゲームアプリ開発者同盟)では、真面目に収益を得ることを目的に

記事を読む

no image

CCSpriteとTexture Packer について

こんばんわmk18です。 課題の方は進んでいますでしょうか? 今回はスプライトの貼り方です。

記事を読む

no image

勉強会を再開します

こんにちはmk18です。 9月中旬から常駐請負を辞めて、自分のアプリに専念しています。

記事を読む

no image

cocos2-xの座標と画像ファイル

こんばんわmk18です。 今回は、実際のゲーム画面に近い物をつくります。 座標はいま私が作ってる

記事を読む

no image

cocos2-xの環境構築とサンプルの実行

こんばんわmk18です。 今回は、cocos2d-xの環境構築をします。 Android

記事を読む

no image

企画とプログラマー、デザイナー以外の仕事について

こんばんわmk18です。 プログラミングの勉強と平行して企画の勉強もして行きましょう。 理想のチ

記事を読む

no image

CとC++の勉強方法について

こんばんわmk18です。 先日はお疲れ様でした。 11名の集まるとはびっくりです。

記事を読む

no image

SimpleGameの機能追加

こんばんわmk18です。 前回のまでの内容は終わったでしょうか? ここで一旦、アウトプットをしま

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

no image
勉強会を再開します

こんにちはmk18です。 9月中旬から常駐請負を辞めて、自分のア

no image
CCSpriteとTexture Packer について

こんばんわmk18です。 課題の方は進んでいますでしょうか? 今回

no image
企画とプログラマー、デザイナー以外の仕事について

こんばんわmk18です。 プログラミングの勉強と平行して企画の勉強も

no image
cocos2-xの座標と画像ファイル

こんばんわmk18です。 今回は、実際のゲーム画面に近い物をつくりま

no image
SimpleGameの機能追加

こんばんわmk18です。 前回のまでの内容は終わったでしょうか?

→もっと見る

PAGE TOP ↑