播放器跳转动作有时会导致EXC_BAD_ACCESS

时间:2012-05-08 15:39:48

标签: cocos2d-iphone box2d

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

1 个答案:

答案 0 :(得分:0)

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