- 画面遷移にトランジションを使うとonEnterなどのタイミングが変わるので注意
- onEnterなどでsuperのメソッドを呼び出さないと入力に反応しなくなる
- onExitなどでsuperのメソッドを呼び出さないとメモリが解放されなくなる
- 重い画面から重い画面に遷移する場合、その間に1つ軽い画面を挟むと良い
- initメソッドではCCDireoctorのreplaceSceneを呼び出さないように注意
- ccp○○○○メソッドでCGPointの差分などの計算ができる
- CGRectContainsPoint(スプライトのバウンディングボックス,タッチ座標)で当たり判定できる
レイヤーを分ける
CCScene
initで複数のレイヤーをaddChildする自分自身を変数に持ちsharedメソッドでそれを渡す半シングルトンとする
(deallocで自分自身を保持する変数をnilにする)
子レイヤーにはゲッターメソッドかreadonlyのプロパティを使用しアクセスする
CCLayer
registerWithTouchDispatcherのpriorityでタッチ入力の優先度をつける(小さい値が優先となる)
ccTouchBeganでNOを返せば次の優先度のレイヤが入力を受ける
レベルの切り替えはシーンを変える、レイヤーを変えるのどちらかで行う
背景色はCCColorLayerクラスを使用する
CCColorLayer* colorLayer = [CCColorLayer layerWithColor:ccc4(255, 0, 255, 255)]; [self addChild:colorLayer z:0];
スプライトの実装
ゲームのキャラクターなどはサブクラス化よりコンポジションの方がよい
オートリリースイニシャライザで初期化
+(id) spiderWithParentNode:(CCNode*)parentNode { return [[[self alloc] initWithParentNode:parentNode] autorelease]; }
CCSchedulerクラスを使用しupdateメソッドをスケジュールする
// initなどで更新をスケジュール [[[CCDirector sharedDirector] scheduler] scheduleUpdateForTarget:self priority:0 paused:NO] //[[CCScheduler sharedScheduler] scheduleUpdateForTarget:self priority:0 paused:NO]; //deallocで解除 [[[CCDirector sharedDirector] scheduler] unscheduleUpdateForTarget:self]; //[[CCScheduler sharedScheduler] unscheduleUpdateForTarget:self];
CCStandardTouchDelegateまたはCCTargetedTouchDelegateプロトコルを実装すればタッチを受け取れる
// initなどでこのクラスをターゲットタッチイベントのレシーバーとして追加する [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:-1 swallowsTouches:YES]; //deallocで解除 [[CCTouchDispatcher sharedDispatcher] removeDelegate:self];
CCNodeの派生クラス
CCProgressTimerでプログレスバーを追加できる
CCParallaxNodeでパララックス処理(多重スクロール)を表現できる
CCRibbonでドラッグの軌跡に画像を描く処理ができる
CCMotionStreakはCCRibbonの描画したものが数秒でフェードアウトするもの
0 件のコメント:
コメントを投稿