我正在用cocos2d和box2d开发游戏。 问题是,当我触摸屏幕以使玩家跳跃时,我的应用程序有时会崩溃。
以下是我在Player类中实现跳转操作的方法:
- (void)jump
{
if (numFootContacts > 0)
{
isJumping = YES;
b2Vec2 impulse = b2Vec2(0.0f, 100.0f);
b2Vec2 point = body->GetWorldCenter(); // this line sometimes triggers an EXC_BAD_ACCESS for the body pointer.
body->ApplyLinearImpulse(impulse, point);
}
}
numFootContacts让我知道我是否在地上。
在我的游戏场景中,我有这个(和其他不相关的东西):
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
[player jump];
return YES;
}
从我在其他人的代码中看到的,这是实现跳转动作的常用方法。
我认为问题来自物理世界更新方法 因为我以另一种方式实现了跳转动作,我只在world-> Step方法之后跳转([player jump]),而且我没有得到任何EXC_BAD_ACCESS。
所有人都有这种问题吗? 我认为这与“问题”非常类似,因为身体被锁定,你无法在回调期间移除身体。 这里的问题是,当世界更新时,我可能会跳得恰到好处。 这个bug有点难以重现(1次超过10次) 告诉我,如果我错了。
答案 0 :(得分:0)
如果您从触摸处理方法调用[player jump]
并且您的应用程序没有多线程,则在ccTouchBegan
函数执行期间无法调用Step
。你得到EXC_BAD_ACCESS
的原因是你在某个地方访问无效指针。它可以是player
,body
或其他任何内容。