「最近ぼちぼちcocos2dとかかじってます。」・・・という書き出しで、このブログが下書き保存されたのは10ヶ月前のようですが、このままだと化石になってしまうので公開してしまいます。
参考文献
cocos2dの公式サイトです。
cocos2d for iPhone
Programming Guid
読んでいる本はこれです。
cocos2dで作る iPhone&iPadゲームプログラミング
セットアップ
cocos2dのサイトからダウンロードしたら、シェルスクリプトを実行して、Xcodeにcocos2dのテンプレートを追加します。
cd cocos2d-iphone
./install-templates.sh -u
とりあえず物理エンジンは使わないので、「cocos2d iOS」でプロジェクトを作成します。
実行してみると、Hello Worldという文字が画面に表示されます。
初期化処理を追う
テンプレートを読んでみると、cocos2dも普通のiOSプロジェクトにすぎず、iOSの枠組みの中で動いていることが分かります。
その初期化処理はほとんど全てdidFinishLaunchingWithOptionsで行われているので、これを追うと、cocos2dがどのように初期化されているかが分かります。
ざーっとコメントつけながら、読んでみました。少し順序的に読みにくい処理になっていますが、UIKitによる部分とcocos2dによる部分を区別して読むのがポイントでしょうか。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// ウィンドウの作成 (これはUIKitの世界)
window_ = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// OpenGLのビューの作成。(これはOpenGLの世界)
CCGLView *glView = [CCGLView viewWithFrame:[window_ bounds]
pixelFormat:kEAGLColorFormatRGB565
depthFormat:0
preserveBackbuffer:NO
sharegroup:nil
multiSampling:NO
numberOfSamples:0];
// Directorの作成 (ここからCocos2dの世界)
director_ = (CCDirectorIOS*) [CCDirector sharedDirector];
director_.wantsFullScreenLayout = YES;
[director_ setDisplayStats:YES];
[director_ setAnimationInterval:1.0/60];
// DirectorにOpenGLのビューを渡す。
[director_ setView:glView];
// ふたたびDirectorの設定
[director_ setDelegate:self];
[director_ setProjection:kCCDirectorProjection2D];
if( ! [director_ enableRetinaDisplay:YES] )
CCLOG(@"Retina Display Not supported");
// テクスチャのデフォルト設定を各8bitのRGBAにする。
[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888];
// リソースの端末振り分けのための接尾辞の設定
CCFileUtils *sharedFileUtils = [CCFileUtils sharedFileUtils];
[sharedFileUtils setEnableFallbackSuffixes:NO];
[sharedFileUtils setiPhoneRetinaDisplaySuffix:@"-hd"];
[sharedFileUtils setiPadSuffix:@"-ipad"];
[sharedFileUtils setiPadRetinaDisplaySuffix:@"-ipadhd"];
// PVR画像はプレマルチプライドアルファとして扱うことを設定
[CCTexture2D PVRImagesHavePremultipliedAlpha:YES];
// Directorにシーンを設定する。 (ここはCocos2dの世界)
[director_ pushScene: [IntroLayer scene]];
// ナビゲーションコントローラを作成してDirectorを渡す。 (ここはUIKitの世界)
navController_ = [[UINavigationController alloc] initWithRootViewController:director_];
navController_.navigationBarHidden = YES;
// ウィンドウにナビゲーションコントローラを渡して、操作できるようにする。
[window_ setRootViewController:navController_];
[window_ makeKeyAndVisible];
return YES;
}
ビューの構造
ようするにビューの構造は以下のようになっているようです。
Window > UINagivationController > CCDirector > CCLayer(OpenGLビュー)
ということは、UIKitで作ったアプリの中に、部分的にcocos2dのビューを埋め込むことも比較的容易にできそうです。
コメント
[…] 「cocos2dの初期化処理を追ってみる。」も書きましたが、Cocos2d for iPhoneは以前に使っていたので、Cocos2d自体の仕様はだいたい理解していました。今回は、マルチプラットフォームのCocos2d- […]