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箇所に貼っています。
関連記事
-
OpenGLとテクスチャの理解
こんばんわmk18です。 cocos2d-xはOpenGLという技術を使って描画しています。 c
-
CCScene、CCLayer、CCSpriteについて
こんばんわmk18です。 今回は、画面に表示されるクラスについて説明します。 CCScene
-
原宿cocos2d-xゲームアプリ塾(仮称)#0の説明資料
最終目標について このアプリ塾(改め、ゲームアプリ開発者同盟)では、真面目に収益を得ることを目的に
-
CCSpriteとTexture Packer について
こんばんわmk18です。 課題の方は進んでいますでしょうか? 今回はスプライトの貼り方です。
-
cocos2-xの座標と画像ファイル
こんばんわmk18です。 今回は、実際のゲーム画面に近い物をつくります。 座標はいま私が作ってる
-
cocos2-xの環境構築とサンプルの実行
こんばんわmk18です。 今回は、cocos2d-xの環境構築をします。 Android
-
企画とプログラマー、デザイナー以外の仕事について
こんばんわmk18です。 プログラミングの勉強と平行して企画の勉強もして行きましょう。 理想のチ
-
CとC++の勉強方法について
こんばんわmk18です。 先日はお疲れ様でした。 11名の集まるとはびっくりです。
-
SimpleGameの機能追加
こんばんわmk18です。 前回のまでの内容は終わったでしょうか? ここで一旦、アウトプットをしま
- PREV
- cocos2-xの環境構築とサンプルの実行
- NEXT
- OpenGLとテクスチャの理解