1

我正在使用 cocos2d 和 box2d、桨、球、砖块在 Objective c 中制作 iPhone 游戏,没有什么花哨的东西,桨处理代码非常适合 x 和 y 运动。我在另一个函数中添加了径向重力代码,但这就是它变得奇怪的地方。该代码没有被调用,只是位于一个方法中,它破坏了完全不相关的桨代码。

更奇怪的是,我在另一个类中添加了一个 nslog,它将混乱从不在 x 上移动到不在 y 上移动并开始移动 x。我可以注释掉随机的代码,它开始工作或重新破解。我可以将 box2d 代码移出并移动它,它是否有效。一切都是随机的。

有谁知道这可能是什么原因?Objective-C 中是否有最大方法大小我可能会溢出,这个类中的一个方法非常大?有什么想法吗?

这是一些代码,如果其他代码相同,则框体只是翻转了。还有更多这样的不同物理体相互作用。如果我对其中任何一个都发表评论,它会起作用。不是,也不是

if (spriteA.tag == kSpritePowerUp && spriteB.tag == kSpritePaddle) {
  if (std::find(toDestroy.begin(), toDestroy.end(), bodyB) == toDestroy.end()) {
    PowerUp *tempPowerUp = (PowerUp*)bodyA->GetUserData();//spriteA;
    Paddle* tempPaddle = (Paddle*)bodyB->GetUserData();//spriteB;
    [tempPaddle addPowerUp:tempPowerUp];
    [self playSoundEffect:kGameSoundPowerUp];
    toDestroy.push_back(bodyA);
  }
}

编辑:解决了我逐行遍历所有课程的所有内容。我跑了泄漏,发现2。

但最后,它变成了一个实用函数中的 2 个本地布尔值,我依赖它来自动初始化为 false。就像大多数时候一样,但有时不会。没有特别的原因。月相什么的。

4

1 回答 1

1

呸。首先,我感同身受。我们都去过那里。

几乎 100% 可以肯定,您的内存处理存在错误——您正在用其他东西覆盖一个对象,或者通常在一些您不打算这样做的内存上进行废话,而副作用只是潜在的随机性。

通过在 Xcode 中运行静态分析器(在 Build 下)开始 - 这将识别一些明显的内存问题,但这些不一定是您所看到的。

在这里注释掉大块的东西可能是一个有用的调试工具——找出存在的功能会导致奇怪的事情开始发生。从那里缩小范围。

(如果您发现某些特定的内存以某种方式变得垃圾,您也许可以设置内存断点。我不知道如何在 Xcode/GDB 中执行此操作,希望其他人会这样做。)

于 2010-08-27T22:58:37.453 回答