【问题标题】:EXC_BAD_ACCESS on IPhone Cocos2diPhone Cocos2d 上的 EXC_BAD_ACCESS
【发布时间】:2010-07-18 18:18:54
【问题描述】:

我有以下代码:

-(void) changeAnimation:(NSString*)name forTime:(int) times {
 if(currentAnimation != @"attack")
 {
  id action = [CCAnimate actionWithAnimation:[self animationByName:name]];
  id repeatAction = [CCRepeat actionWithAction:action times:times];
  currentAction = [self runAction:repeatAction];
  lastANimation = currentAnimation;
  currentAnimation = name;
 }
 else if(currentAction.isDone)
 {
   //Here is where I would change the animation
   //but I commented the code for now
 }
}

因此,当我运行它并单击将动画更改为“攻击”的按钮时(通过调用 [mysprite changeAnimation:@"attack" forTime:1];),我从“currentAction.isDone”中收到 EXC_BAD_ACCESS 错误" 行,下次调用该函数时(操纵杆会调用 changeAnimation 尝试将动画更改为“运行”或“空闲”,但我希望攻击动画先完成)。关于为什么我得到这个有什么想法吗? currentAction 在我的班级中声明。

编辑:除了 getter 之外,类的其余部分没有与 currentAction 交互的内容。它的声明在 .h (CCAction* surrentAction) 中。我需要初始化它吗?我认为 runAction 的返回值就足够了?无论如何,当我运行调试器时,它不是 nil,而是分配给正确的操作。

谢谢,

戴夫

编辑: 我最终在“攻击”时创建了一个序列,该序列调用了一个改变 currentAnimation 的函数,所以我避免了这个问题。仍然不知道发生了什么。 如果您有兴趣,这里是答案: Other Post

【问题讨论】:

  • 真的需要看看课程的其余部分——你在哪里以及如何定义 currentAction 以及你如何与之交互来回答。
  • @heckj:看到问题中的编辑,还有什么?谢谢!
  • 猜它与错误无关,但你应该使用 isEqualToString: 在你的条件。
  • @pumbaa:谢谢你这样做

标签: iphone objective-c cocos2d-iphone


【解决方案1】:

可能需要更多的课程才能真正正确地回答这个问题,但 EXC_BAD_ACCESS 通常会发生,因为您正在访问已发布且不再在内存中可用的内容。

我猜想在你的类中的某个地方你正在异步释放“currentAction”对象,无论是显式的还是隐式的 - 当你稍后检查时,它已经完成并消失了,你正在遇到这个崩溃。

一般来说,保留一个或两个你总是知道值的状态变量是一个好方法,对于你正在经历的“动作”,如果它们是异步的并且做自己的内存管理,让它们保持原样,并处理一些您维护和控制所有内存管理的状态变量。对于异步回调来说,这是一个非常合理的模式,无论是使用经典的东西还是在您开始使用 iOS 4.0 的块时

【讨论】:

  • 感谢答案,我没有做任何内存管理,因为我知道 cocos2d 会处理它(至少对于它创建的所有对象,比如我的 currentAction)。我很想维护一个状态变量(这就是为什么我有 last 和 currentAnimations),但我需要知道攻击动作何时结束才能开始另一个。不知道我说清楚了吗?我可以明确地阻止我的 currentAction 对象上的内存释放吗?
  • 为此,我认为您需要了解 cocos2D,我对此并没有太多的知识。你有正确的想法——在某个地方插入 Cocos2D 并让它回调以让你知道什么时候发生了变化——从那里更新你的状态变量。听起来您已经通过解决方案有效地解决了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-05
  • 2010-11-24
  • 2016-01-20
相关资源
最近更新 更多