我正在使用cocos2d和box2d进行客观c的iPhone游戏,桨,球,砖没什么太花哨的,桨处理代码适用于x和y运动。我在另一个函数中添加了径向重力代码,但这里变得奇怪了。代码没有被调用,只是坐在一个方法中,它打破了完全不相关的paddle代码。
它甚至更奇怪,因为我在另一个类中添加了一个nslog,它将乱码从不在x上移动到不在y上移动并开始移动x。我可以注释掉随机的代码,它开始工作或重新启动。我可以将box2d代码移出并移动它,它是否有效。一切都是随机的。
有谁知道这会导致什么?在Objective-C中是否有最大的方法大小我可能会溢出,这个类中的一个方法是非常大的?有什么想法吗?
这里有一些代码,有一个匹配的if else相同的代码只是翻转盒体。不同的物理机构相互作用,还有更多这样的东西。如果我评论它们中的任何一个都有效。不是,它没有
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。像大多数时候一样,但有时它不会。没有特别的原因。月亮的某个阶段。
答案 0 :(得分:1)
呸。首先,我同情。我们都去过那儿。
几乎100%的确定性,你的内存处理有一个错误 - 你用其他东西覆盖一个对象,或者通常是在你不想要的某些记忆上,并且副作用只是潜在的随机性。
通过在Xcode中运行静态分析器(在Build下)启动 - 这将识别一些明显的内存问题,但这些并不一定是你所看到的。
在这里评论大块的东西可能是一个有用的调试工具 - 弄清楚存在什么功能会导致奇怪的事情开始发生。从那里缩小它。
(如果你在某种程度上识别某个特定内存中的垃圾,你可能会设置内存断点。我不知道如何在Xcode / GDB中执行此操作,希望其他人可以这样做。)< / p>