我正在为我的项目制作类似《愤怒的小鸟》的游戏。除了最基本的:在游戏物理中提供逼真的感觉之外,大多数事情都已完成。我最挣扎的部分是伤害。我正在使用 libgdx,它为 Box2d 提供了一个包装器,因此代码对于任何了解 Box2d 的人来说都不应该是陌生的。这是 postSolve 方法
@Override
public void postSolve(Contact contact, ContactImpulse impulse) {
float[] forces = impulse.getNormalImpulses();
int index1 = (Integer) contact.getFixtureA().getBody().getUserData();
int index2 = (Integer) contact.getFixtureB().getBody().getUserData();
if( forces[0] > 0.3 )
bodies.get(index1).handleCollision(forces[0]);
if( forces[1] > 0.3 )
bodies.get(index2).handleCollision(forces[1]);
}
这会拉出正在碰撞的物体并将正常的碰撞脉冲传递给它们,以便它们可以处理损坏。现在这是其中一具尸体的损坏处理函数
@Override
public void handleCollision(float impulse) {
health -= impulse;
else if( health < 50 )
isFlaggedForDelete = true;
}
我最初根据所有身体的大小为所有身体提供健康值,并且每次发生足够强烈的碰撞时,它们都应该受到相应的伤害。
问题是身体以图像中显示的方式排列。每当任何一个方块发生轻微的碰撞,甚至没有使它移动时,整个结构(我认为)开始振动,下面的方块被破坏(因为健康),整个结构倒塌。
我已将 b2VelocityThreshold 设置为最大值(进一步增加它会在游戏中引入不良行为)。postSolve 方法还设置了足够高的阈值。我的方法有什么问题?
谢谢。