我有一个Player
类,其中包含一个由球体代表的物理体,我希望能够分辨出玩家是在地上,墙上还是在空中。到目前为止,我有一个bool IsOnGround
,我为物理主体设置了这些事件处理程序:
void PhysicsBody_OnSeparation(Fixture fixtureA, Fixture fixtureB)
{
IsOnGround = false;
PhysicsBody_OnCollision(fixtureA, fixtureB, null);
}
bool PhysicsBody_OnCollision(Fixture fixtureA, Fixture fixtureB,
FarseerPhysics.Dynamics.Contacts.Contact contact)
{
if (fixtureB.UserData is JumpableFixtureData &&
fixtureB.Body.Position.Y > fixtureA.Body.Position.Y)
{
IsOnGround = true;
}
else
{
IsOnGround = false;
}
return true;
}
我有我的关卡,以便每个关卡对象将其物理主体的用户数据设置为JumpableFixtureData
(只是一个空类),虽然大多数对象都是矩形,但有几个形状与洞穴般的开口,这样玩家就可以在里面打开形状。
我的问题是,当物体仍然在空中时,有时IsOnGround
布尔值被设置为真,有时在接触地面后它仍然是假的。这种设置显然不起作用。我该怎么做呢?我在Box2D教程中找到了this tutorial,但我还没有永远使用C ++,我找不到任何方法来创建一个单独的灯具实例,所以我可以把它变为&#39 ;脚'
答案 0 :(得分:1)