我正在阅读“Learning Cocos2d”一书,但我坚持一些基本的东西。
所以,有一个父类:GameplayLayer。其中,有一个“init”方法在这里创建主角的一个实例——“Viking”。Viking 是“GameCharacter”的子类,它是“GameObject”的子类。
#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 调用。它是父类,GameObject 也有这个 update 方法,如果不小心调用它会弹出一个错误消息——“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”方法。但不知何故,它调用了 GameObject 中的父方法,上面写着“应该覆盖更新状态”。如何覆盖父方法?
非常感谢,
卡尔