プログラミングの魔物

エラー、バグ、仕様変更と戦うブログ

cocos2dの概要

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

この本はcocos2dというゲーム開発フレームワークについて書かれた本。
ただし、解説されているのは古いバージョンのため、最新のcocos2dの仕様とは異なる部分が多いらしい。
その点を踏まえつつ、読み進めていく。

1章

1章は導入なのであまりメモる内容なし。

2章

  • iOS開発登録の手順など
  • iOS SDKのベータ版とiOSのベータ版はcocos2dと互換性がない可能性があるので使わない方がいい
  • cocos2dのインストール

http://www.cocos2d-iphone.org/downloadからダウンロードしてターミナルで

./install-templates.sh
  • xcodeでcocos2dのプロジェクト作成

コンパイル済みのプレフィックスヘッダ

Prefix.pchに記述しておくことで事前にコンパイルされ、すべてのクラスで利用可能になる。
コンパイルを高速化するため、滅多に変化しないヘッダファイルを追加しておく。
候補としてはcocos2d.h

#import "cocos2d.h"

プレフィックスヘッダに関する詳しい情報はAppleのDeveloperドキュメント参照

プロジェクト名AppDelegate

アプリケーションの状態の変化を追跡するためのクラス。
iOSから着信やメモリ不足などのメッセージを受け取る。
アプリケーションが最初に受け取るメッセージはapplicationDidFinishLaunching。
詳しくはAppleのリファレンスドキュメントでUIApplicationDelegateプロトコル参照。
※終了時の処理はapplicationWillTerminateに記述

ほとんどの場合cocos2dの初期化プロセスで変更する必要があるかもしれないのは次の部分。
※Cocos2d v2からコピペしたので本とは違う部分がある。

director_ = (CCDirectorIOS*) [CCDirector sharedDirector];
director_.wantsFullScreenLayout = YES;
// Display FSP and SPF 画面にFPSとSPFを載せるか
[director_ setDisplayStats:YES];
// set FPS at 60 アニメーション時間
[director_ setAnimationInterval:1.0/60];

画面を縦向きにする方法(「cocos2d v2 縦向き」とかでググればいい)

HelloWorldLayerクラス

  • CCNodeはすべてのノードのベースクラス
  • CCSceneは抽象概念として使われるクラスで、ピクセル座標に基づいてシーン内のオブジェクトを適切に配置できるようにする。したがってCCSceneは常にすべてのcocos2dシーン階層の親オブジェクトとして使われる
  • CCLayerはタッチ入力と加速度センサー入力を可能にする以外はそれ自体はほとんど何もしない。通常はCCSceneに追加される最初のクラス

メモリ管理

  • cocos2dではautoreleaseを前提に作る。[[Object alloc] init]せずに静的イニシャライザnodeを使う
  • nodeで割り当てたオブジェクトをaddChildでcococ2dが管理するノードに格納する
-(void) init{
  myNode = [CCNode node];
  myNode.tag = 123;
  [self addChild:myNode];
}
-(void) update:(ccTime)delta{
  CCNode* myNode = [self getChildByTag:123];
  //myNodeを使った処理
}
  • iOSプログラミングはデバイスによって仕様が異なるので注意が必要。シミュレータはデバイスの一つであり完全ではない
  • 利用可能なメモリはシビア。搭載メモリ量によるが古いデバイスでは20〜25MB程度を目安に
  • cocos2dではpurgeメソッドを呼び出すことでメモリを少し解放できる
  • メモリの使用量はInstrumentsアプリケーションで確認できる

シミュレータで実行できないこと

  • パフォーマンスは評価できない
  • メモリ使用量は評価できない(どれくらい使用しているかは確認できる)
  • すべての機能は使えない
  • 実行時の振る舞いが異なる可能性がある

2.5.4ログについて

DebugビルドのみCCLOGという特定の関数がコンパイルされる。デバッグ情報はNSLogの代わりにCCLOGを使う
※パフォーマンスを評価するにはReleaseビルドを使う

参考:

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

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