我正在制作坦克游戏,但我在使用 Cocos2d CCAnimate 时遇到了问题——更具体地说,我的 CCAnimation 变量自发地丢失了数据!
它们被用于坦克对象的状态改变器(tank.m)
-(void)changeState:(CharacterStates)newState {
[self stopAllActions];
id movementAction = nil;
action = nil;
//CCLOG(@"Change state from %i to %i",self.characterState, newState);
[self setCharacterState:newState];
switch (newState) {
case kStateIdle:
action = [CCAnimate actionWithAnimation: idleAnim //**ANIM
restoreOriginalFrame:NO]; //**ANIM
[action setTag:kStateIdle];
break;
case kStateMoving:
action = [CCAnimate actionWithAnimation: movingAnim //**ANIM
restoreOriginalFrame:NO]; //**ANIM
break;
}
if (action != nil) {
[self runAction:action];
}
}
'action' 在坦克的 .h 文件中预定义 - “id action;”
当游戏初始化时,坦克(有四个)初始化没有问题,它们都被设置为“kStateIdle”没有问题。
然后 GameEngine 主循环调用坦克进行更新 - 对其速度进行测试,并检查以确保它们尚未移动或受到伤害,并且状态更改为“kStateMoving” -
if (self.characterState != kStateMoving && self.characterState != kStateTakingDamage && abs(velocity)>0.4) {
[self changeState:kStateMoving];
但是当游戏开始时
[CCAnimate actionWithAnimation:movingAnim restoreOriginalFrame:NO];
Cocos2d 在 'CCActionInterval' 中出现 'EXC_BAD_ACCESS' 崩溃,(调试器将 _cmd 报告为 'initWithAnimation: restoreOriginalFrame')
原因是 CCAnimation 'movingAnim'(和 idleAnim)突然损坏了。如果我在调试器中检查它们,它们有一个内存地址,但没有报告它们的帧值。当坦克初始化时,他们都在那里。他们在玩家坦克上都很好。没有什么可以释放它们(我什至从 Dealloc 方法中删除了它们)。
我已将它们定义为 tank.h 头文件中的(单原子,保留)属性。
那么他们可能去了哪里?有没有办法在他们身上放置一个观察点?(我有 Xcode 4.3.2,所以菜单中没有任何内容).. 或者有没有办法定义它们以便他们保留数据?
干杯!
卡尔
(PS。哇!然后我开始计算 3259 度的角度,我开始挠头并追踪数字(每当我看到它们就会恢复正常)并且 bam!Xcode 完全关闭。
当编辑器本身开始抛出抖动时,很难调试我的程序!)