こんにちはスタックオーバーフローコミュニティ!
衝突検出と物理演算に Box2D を使用する Android ゲームに取り組んでいます。現在、基本的なプラットフォーマー システムを実装しています。ジャンプはできますが、小さな不具合があります。次の関数は、プレイヤーが地面にいるかどうかを判断するためのものです。シンプルですね。まあ、プレイヤーが壁のすぐ隣にいない限り、問題なく動作します。その場合、壁がプレイヤーの真下になくても、関数は true を返すため、常にジャンプするだけです。
真下にあるものと衝突していることを確認するために、追加の x チェックを追加しようとしましたが、役に立ちませんでした。
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チェックをより効率的にするために私ができることへの指針を誰かが持っていますか?
前もって感謝します!:)