私は「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 の親メソッドを呼び出しています。親メソッドをオーバーライドするにはどうすればよいですか?
どうもありがとう、
カール