だいたい47度

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PageTop

Box2Dを知るためLearning Cocos2Dを読む(3)Part II More Enemies and More Fun

cocos2dの物理エンジン周りの勉強&cocos2dの復習のため、Learning Cocos2Dを読んだメモを残していきます。

全5部17章構成で、今回は2部の5-6章を読みます。ちょっと短めかな。
Part Iでゲームの根幹部分ができたので、それを複雑化させていきます。

【過去】
Learn Cocos2Dを手にとった理由
Part I Getting Started with Cocos2D

結構大事なこととして、子クラスから親layerを参照する方法が以前読んだ本と違いました。cocos2dで作る iPhone&iPadゲームプログラミングでは、layerを擬似singletonにし、静的メソッドsharedLayerでlayerを呼び出していましたが、この本だと、各クラスにdelegateプロパティを作ってそこにassignでlayerを渡す方式で書いています。layerにはプロトコルを設定してやることで疎結合を実現しています。javaのinterfaceのような感じです。こっちの方が面倒くさいけど拡張性は高いですね。
/* cocos2dで作る iPhone&iPadゲームプログラミング */
//MyLayer.h
+ (id)sharedMyLayer;

//MyLayer.m
static MyLayer instance;

+ (id)sharedMyLayer {
NSAssert(instance != nil, @"MyLayer instance is not yet initiated!");
return instance;
}

- (id)init{
if (self = [super init]){
instance = self;
...}
}

//MyObject.m
MyLayer* layer = [MyLayer sharedMyLayer];
[layer someMethod];//なんでも呼べてしまうので結合が密
/* Learning Cocos2D */
//SomeMethodDelegate.h
@protocol SomeMethodDelegate
- (id)someMethod;
@end

//MyLayer.h
@interface MyLayer : CCLayer <SomeMethodDelegate> <OtherDelegate>{...}

//MyObject.h
@property (nonatomic, assign) id<SomeMethodDelegate> delegate;

//MyObject.m
[delegate someMethod];//結合が疎だが、protocolを作ってやる必要がある

Chapter 5 More Actions, Effects, and Cocos2D Scheduler
Chapter 4を応用してアイテムや敵を作っていきます。主人公を発見すると追跡しながら弾を発射する敵なども作ります。

Actionの扱いがよいパターンに落ちていて真似しようと思いました。各キャラクタオブジェクトは、changeStateとupdateStateWithDeltaTimesというインスタンスメソッドを持っています(親クラスGameCharacterのメソッドをOverrideします)。changeStateではenumで決めてあるstate(移動中・ジャンプ中など)を受け取り、対応するCCActionを呼び出します(CCAction内で使われるアニメーションについては前回のplist項参照。オブジェクトのinit時に読み込んで保持しています)。もう一方のupdateStateWithDeltaTimesは、親のscheduleUpdateから呼ばれるメソッドです。移動中にダメージを受けたなどstateを強制的に変えるものはchangeStateを呼び出し、そうでない場合はActionが一巡したかどうかを確認して、次のアニメーションを呼び出します。
- (void)changeState:(CharacterStates)state{
if (state == kStateDead) return;//死んでいる場合は無視
[self stopAllAction];
switch (state){......}//stateに応じたactionをrun
}

- (void)updateStateWithDeltaTimes:(ccTime)deltaTime andListOfGameObject:(CCArray*)listOfGameObject{
......//listOfGameObjectを参照し、現在のactionを中止しても他のactionを行うべきか確認
if (haveToChangeState) [self changeState:newState]; return;
......
if ([self numberOfRunningActions] == 0) [self changeState:nextState];
}


Chapter 6 Text, Fonts, and the Written Word
CCLabelTTFとCCLabelBMFontについて簡単に説明し、CCLabelBMFontを使って各キャラクタの頭上にデバッグ用のパラメータを描画します。ビットマップフォント作成ツールとしては、Glyph DesignerとHiero Font Builderを紹介しています。

CCLabelTTFは簡易に使えますが、setTextを行うと新たにテクスチャを作るので処理として重いです。もしフレームごとに更新するなどの処理をするのなら、CCLabelBMFontにしましょう(iOSシミュレータの右下のFPS表示もビットマップフォントですね)。


ということでPart II More Enemies and More Funが終了。いったん一つ目のゲームは開発終了なのかな。今回は短かったけど考えさせられることが多くて楽しかったです。ではまた次回


Learning Cocos2D: A Hands-On Guide to Building iOS Games with Cocos2D, Box2D, and ChipmunkLearning Cocos2D: A Hands-On Guide to Building iOS Games with Cocos2D, Box2D, and Chipmunk
(2011/07/07)
Rod Wenderlich, Ray Strougo

商品詳細を見る
関連記事
スポンサーサイト

PageTop

コメント


管理者にだけ表示を許可する
 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。