【问题标题】:box2d, destroing a b2_staticbody while colliding with a b2_dynamicbody leads to tunnelingbox2d,在与 b2_dynamicbody 碰撞时破坏 b2_staticbody 会导致隧道效应
【发布时间】:2011-08-30 15:47:06
【问题描述】:

我要做一个类似“Doodle Jump”的函数:一个球(动态体)在与一个平台(静态体)碰撞后跳跃。

我是这样实现的: 1.定义自己的ContactListener:定义一个联系人数组,BeginContact插入body,EndContact擦除body 2. [self scheduleupdate]遍历contact数组,如果一个contact body是一个平台(staticbody),则销毁它。

问题是球与平台碰撞后不会跳跃,平台被破坏。 球只会穿过前一个静态体。

有人可以帮忙吗?

【问题讨论】:

  • 很难理解你想要做什么。平台被击中时应该会消失,对吧?因此,球和平台不再碰撞似乎很自然。

标签: box2d


【解决方案1】:

通常你会想要使用 b2_kinematicBody 来模拟一个平台,并将它设置为 LinearVelocity 以使其移动。

考虑到滚动屏幕或跳球的错觉,您可以让平台移动。

要模拟反弹,您可以将恢复原状设置为更接近 1 的值。

要销毁平台,您可以设置一个简单的contactListener:

//in the end of update: method

if (bodyASprite.tag == BALL_TAG && bodyBSprite.tag == PLAT_TAG)
    world->DestroyBody(bodyB);
else if (bodyASprite.tag == PLAT_TAG && bodyBSprite.tag == BALL_TAG)
    world->DestroyBody(bodyA);

【讨论】:

    猜你喜欢
    • 2013-08-05
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    相关资源
    最近更新 更多