7 Chapter cocos2d-x の応用 2 ゲームでは、キャラクターをジャンプさせて障害物を避けたり、迫りくる敵と激突して 跳ね返ったりなど、物理的な計算が必要な場合があります。こうした物理計算は、物 理が得意なら問題ないでしょうが、苦手な人も多いでしょう。そんなとき、勝手に物 理演算を行ってくれるものがあれば嬉しいですよね。実は、cocos2d-x には Box2D とChipmunkという2 つの物理演算用フレームワークが用意されています。あらか じめ値をセットしておけば、とくに意識することなく物理演算を行ってくれます。なお、 Box2D は C++で、Chipmunk は C 言語で利用します。どちらを利用してもいいの ですが、ここでは Box2D を利用したゲーム作成を紹介します。 [サンプルゲーム 3:リンゴ大収穫] 7.1 プロジェクトの準備 本章では、落ちてくるリンゴをネコがキャッチするゲームを作成します。ただリンゴが落 ちてくるだけではゲーム性が乏しいので、虫も落としてネコをビックリさせたり、間違って キャッチすると減点したりもしましょう。リンゴや虫が落ちてくるので、Box2D を利用して重 力を持つ空間を作成します。またオブジェクトが衝突したときの処理も行いたいと思います。 最初にプロジェクトを作成しますが、これまで学んできたことがほとんどなので、さっと 準備を整えましょう。この節では、プロジェクトの作成、背景の表示、ネコの表示、ラベルの 表示を行います。 それではプロジェクトを作成しましょう(プロジェクトの作成方法は、Chapter 5.1 を参 照)。プロジェクト名は「nyancatch」としました。プロジェクト作成後、本書サンプルを利 用してリソースの準備を行いましょう。プロジェクトへリソースを追加しますが、この例で もマルチレゾリューション対応を行うので、ディレクトリへ追加してください(追加方法は、 Chapter 6.1 を参照)。マルチレゾリューション対応のため、AppMacros.h を作成し、次のよ うに記述してください(ヘッダファイルの作成方法は、Chapter 2.4 参照)。 ■■ AppMacros.h 01 #ifndef __APPMACROS_H__ 02 #define __APPMACROS_H__ 03 04 #include "cocos2d.h" 05 06 typedef struct tagResource 07 { 08 cocos2d::CCSize size; 09 char directory[100]; 10 } Resource; 11 12 static Resource smallResource = { cocos2d::CCSizeMake( 512, 384), "S"}; 13 static Resource mediumResource = { cocos2d::CCSizeMake(1024, 768), "M"}; 14 static Resource largeResource = { cocos2d::CCSizeMake(2048, 1536), "L"}; 15 16 static cocos2d::CCSize designResolutionSize = cocos2d::CCSizeMake(1024, 768); 17 288 7.1 18 19 20 プロジェクトの準備 #define NUMBER_FONT_SIZE (cocos2d::CCEGLView::sharedOpenGLView()->getDesign ResolutionSize().width / mediumResource.size.width * 48) #endif // __APPMACROS_H__ フォントサイズの名称が NUMBER_FONT_SIZE と異なっている以外は、Chapter 6 の AppMacros.h と 同 じ で す。次 に AppDelegate.cpp の include と applicationDidFinish Launching( ) 関数を次のように修正してください。 ■■ AppDelegate.cpp 01 #include "AppDelegate.h" 02 #include "AppMacros.h" 03 #include "GameScene.h" ■■ AppDelegate.cpp 01 bool AppDelegate::applicationDidFinishLaunching() 02 { 03 CCDirector* pDirector = CCDirector::sharedDirector(); 04 CCEGLView* pEGLView = CCEGLView::sharedOpenGLView(); 05 06 pDirector->setOpenGLView(pEGLView); 07 08 // デザインサイズの設定 09 pEGLView->setDesignResolutionSize(designResolutionSize.width, design ResolutionSize.height, kResolutionNoBorder); 10 11 CCSize frameSize = pEGLView->getFrameSize(); 12 13 std::vector<std::string> searchPath; 14 15 if (frameSize.height > mediumResource.size.height) 16 { 17 // 「L」ディレクトリのリソースを使用する 18 searchPath.push_back(largeResource.directory); 19 pDirector->setContentScaleFactor(MIN(largeResource.size.height / design ResolutionSize.height, largeResource.size.width / designResolutionSize. width)); 20 } 21 else if (frameSize.height > smallResource.size.height) 22 { 23 // 「M」ディレクトリのリソースを使用する 7 ccccccccc c c c c 289 24 25 searchPath.push_back(mediumResource.directory); pDirector->setContentScaleFactor(MIN(mediumResource.size.height / design ResolutionSize.height, mediumResource.size.width / designResolutionSize. width)); 26 27 28 29 30 31 } else { 32 33 34 35 36 37 38 39 40 41 42 43 } // 「S」ディレクトリのリソースを使用する searchPath.push_back(smallResource.directory); pDirector->setContentScaleFactor(MIN(smallResource.size.height / design ResolutionSize.height, smallResource.size.width / designResolutionSize. width)); // リソースディレクトリを指定する CCFileUtils::sharedFileUtils()->setSearchPaths(searchPath); pDirector->setDisplayStats(true); pDirector->setAnimationInterval(1.0 / 60); CCScene* pScene = GameScene::scene(); pDirector->runWithScene(pScene); return true; } これも Chapter 6 と同じです。最初に GameScene クラスを呼び出したいので、HelloWorld ク ラ ス の フ ァ イ ル を 削 除 し 39 行 目 の よ う に コ ー ド を GameScene に 修 正 し て い ま す (GameScene クラスがまだ存在しないのでエラーになりますが、この段階では気にせずに先 に進めましょう)。これでマルチレゾリューション対応ができました。 次にゲームのシーンとなる GameScene クラスの GameScene.h と GameScene.cpp ファイ ルを用意しましょう(クラスの作成方法は、Chapter 2.4 参照)。そして、背景の表示、ネコ の表示、ラベルの表示を行います。GameScene.h を次のように記述してください。 ■■ GameScene.h 01 #ifndef __GAME_SCENE_H__ 02 #define __GAME_SCENE_H__ 03 04 #include "cocos2d.h" 05 06 USING_NS_CC; 290
© Copyright 2024 Paperzz