cocos2dの初期化処理を追ってみる。

「最近ぼちぼちcocos2dとかかじってます。」・・・という書き出しで、このブログが下書き保存されたのは10ヶ月前のようですが、このままだと化石になってしまうので公開してしまいます。

参考文献

cocos2dの公式サイトです。
cocos2d for iPhone
Programming Guid
読んでいる本はこれです。

cocos2dで作る iPhone&iPadゲームプログラミング

セットアップ

cocos2dのサイトからダウンロードしたら、シェルスクリプトを実行して、Xcodeにcocos2dのテンプレートを追加します。

cd cocos2d-iphone
./install-templates.sh -u

とりあえず物理エンジンは使わないので、「cocos2d iOS」でプロジェクトを作成します。
スクリーンショット 2012-10-20 17.51.26
実行してみると、Hello Worldという文字が画面に表示されます。
スクリーンショット 2012-10-20 17.55.55

初期化処理を追う

テンプレートを読んでみると、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のビューを埋め込むことも比較的容易にできそうです。

コメント

  1. […] 「cocos2dの初期化処理を追ってみる。」も書きましたが、Cocos2d for iPhoneは以前に使っていたので、Cocos2d自体の仕様はだいたい理解していました。今回は、マルチプラットフォームのCocos2d- […]

タイトルとURLをコピーしました