我正在用 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方法之后跳转([玩家跳转]),并且我没有得到任何EXC_BAD_ACCESS。
那么有人已经有这种问题了吗?
我认为这与由于身体被锁定而无法在回调期间删除身体的“问题”非常相似。这里的问题是,也许我在世界更新时跳得恰到好处。该错误很难重现(1 次超过 10 次)。
如果我错了,请告诉我。