2013年9月17日火曜日

ゲームの実装方法



  • 画面遷移にトランジションを使うと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 件のコメント:

コメントを投稿