0

我正在用 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 次)。
如果我错了,请告诉我。

4

1 回答 1

0

如果您[player jump]从触摸处理方法调用并且您的应用程序不是多线程的,则在函数执行ccTouchBegan期间无法调用。Step您得到的原因EXC_BAD_ACCESS是您在某处访问无效指针。它可以是playerbody或其他任何东西。

于 2012-05-08T17:51:13.137 回答