问候stackoverflow社区!
我正在开发一款使用 Box2D 进行碰撞检测和物理的 Android 游戏。现在,我正在实现一个基本的平台游戏系统。跳跃是到位的,但它有一个小故障。以下函数用于确定玩家是否在地面上。很简单,对吧?好吧,它可以正常工作,除非玩家就在墙旁边,在这种情况下,它只会让他不断地跳起来,因为该函数仍然会返回 true,即使墙不在玩家的正下方。
我尝试添加额外的 x-checks 以确保我与直接在我下方的东西发生碰撞,但无济于事。
private boolean isGrounded(float deltaTime) {
List<Contact> contactList = world.getContactList();
for(int i = 0; i < contactList.size(); i++) {
Contact contact = contactList.get(i);
if(contact.isTouching() && (contact.getFixtureA() == sensorFixture ||
contact.getFixtureB() == sensorFixture)) {
Vector2 pos = body.getPosition();
WorldManifold manifold = contact.getWorldManifold();
boolean below = true;
Vector2 cpoint;
for(int j = 0; j < manifold.getNumberOfContactPoints(); j++) {
cpoint = manifold.getPoints()[j];
below &= (
(cpoint.y < pos.y - 0.15f)
&& (cpoint.x > pos.x - w/2 + 3f)
&& (cpoint.x < pos.x + w/2 - 3f)
);
if(below) return true;
}
return false;
}
}
return false;
}
那么,是否有人对我可以做些什么来提高 isGrounded 检查的效率有任何指示?
提前致谢!:)