我正在进行坦克游戏,而且我遇到了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完全关闭。
当编辑器本身开始抛出摇摆器时,很难调试我的程序!)