【问题标题】:Box2d dynamic bullet body sinking into static bodiesBox2d 动态子弹体沉入静态体
【发布时间】:2012-04-24 07:37:40
【问题描述】:

我正在使用 box2d 在 cocos2d 中制作游戏,但遇到了一些问题。

我让程序遍历 tilemap 的 (.tmx) 行和列,搜索“collidable”属性设置为“true”的图块。如果找到,则在该图块的位置设置一个方形静态 box2d 主体(带有固定装置和所有)。所以本质上,我应该在迭代完成后在我需要它们的地方(取决于瓷砖地图)设置一堆方形物体。我还有一个由手势控制的方形动态主体(向上手势向上滑动,向下手势向下滑动等),它应该只在四个方向之一上移动:上、下、左、右。身体的恢复是 0.0f,因此它会在没有反弹的情况下停止撞击,并且摩擦也是 0.0f,因为不需要它(世界重力是 0.0f,也是 0.0f)。由于通过 tilemap 的迭代只能放置正方形的物体,所以游戏中的“墙”是由几个这样的正方形组成的,它们彼此相邻,首尾相连,这为动态物体碰撞创造了一个齐平的边缘和。

当动态物体与正方形墙发生碰撞时,就会出现问题。我通过根据手势设置身体的速度来控制身体的运动。向右移动的一个例子是:

#define bodyVel 100
...
if (gestureRight)
{
body->SetLinearVelocity( b2Vec2(bodyVel / PTM_RATIO, 0) );
}

我将身体设置为子弹,这样当它与墙壁碰撞时就不会嵌入,但我遇到了一些奇怪的结果。一个例子是这样的:

我将身体向右移动到墙上,它停止了。好的。接下来,我想向上移动它,所以我向上示意。好的。但是,有时,当它在墙上滑动时,身体似乎“抓住”了什么东西,它会失去控制并朝多个方向旋转。坏的。

我能想到的唯一解释是,动态体实际上是在第一个接触头部时嵌入到墙壁中,并且当它在下一个给定的移动手势时沿着墙壁滑动时,它会被抓住构成墙壁的正方形的边缘之一,并从笔直的路径中变得刺耳。我通过将身体设置为固定旋转(根本不旋转)来确认这个奇怪的活动,因此,它不会失去控制,而是简单地停止。鉴于我的假设,这是意料之中的。所以我想说的是动态体正在嵌入。

我不明白为什么会发生这种情况,因为我将身体设置为像子弹一样行事,以避免完全类似的问题。我想要物体做的就是能够沿着笔直的路径移动——无论是向上、向下、向左还是向右——在与墙壁接触时停止,并沿着墙壁移动而不受构成墙壁的物体的干扰.

我觉得除非我对弹体的工作原理有误解,否则正在发生的嵌入应该不是问题。

我还使用 DebugDraw 来查看方形静态物体是否创建了一个齐平的墙,他们确实做到了。

【问题讨论】:

    标签: cocos2d-iphone box2d collision bullet


    【解决方案1】:

    不幸的是,这是 Box2d 中的一个已知问题...from the FAQ:

    基于图块的环境

    对地形使用多个框可能效果不佳,因为类似于框 字符可能会被卡在内角。未来的更新 Box2D 应该允许在边缘链上平滑运动。一般来说你 应避免使用矩形字符,因为碰撞 公差仍然会导致不良的钩丝。

    有关更多信息,请参阅此帖子: http://box2d.org/forum/viewtopic.php?f=3&t=3048

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2016-04-07
      • 1970-01-01
      • 2011-08-04
      相关资源
      最近更新 更多