私は「Learning Cocos2d」の本を読んでいますが、何か基本的なことに行き詰まっています。
そのため、親クラス: GameplayLayer があります。その中には、ここで主人公のインスタンス「バイキング」を作成する「init」メソッドがあります。Viking は、「GameObject」のサブクラスである「GameCharacter」のサブクラスです。
#pragma mark INIT PLAYER
Viking *viking = [[Viking alloc]
initWithSpriteFrame:[[CCSpriteFrameCache sharedSpriteFrameCache]
spriteFrameByName:@"viking.png"]];
[viking setJoystick:leftJoystick];
[viking setFireButton:fireButton];
[viking setSecondaryButton:secondaryButton];
[viking setCollisionLayer:collidableLayer]; // send collision layer to player
[viking setPosition:ccp(screenSize.width * 0.35f, screenSize.height * 0.14f)];
[viking setHealth:100];
[sceneSpriteBatchNode addChild:viking z:1000 tag:kPlayerSpriteTagValue];
現在、Viking には、GameplayLayer によってすべてのフレームで呼び出される update メソッドがあります。これは親クラスであり、GameObject にもこの更新メソッドがあり、誤って呼び出された場合、「GameObject update should be overridden」というエラー メッセージが表示されます。
したがって、私のコードでは、次のメソッドを使用して「Viking」の更新メソッドを呼び出しています。
#pragma mark UPDATE_METHOD
-(void) update:(ccTime)deltaTime
{
CCArray *listOfGameObjects =
[sceneSpriteBatchNode children];
for (GameObject *tempChar in listOfGameObjects) {
CCLOG(@"engine found %@",tempChar);
[tempChar updateStateWithDeltaTime:deltaTime
andListOfGameObjects:listOfGameObjects];
}
}
したがって、これは Viking で「updateStateWithDeltaTime」メソッドを呼び出すことになっています。しかし、どういうわけか、「updatestate をオーバーライドする必要がある」という GameObject の親メソッドを呼び出しています。親メソッドをオーバーライドするにはどうすればよいですか?
どうもありがとう、
カール