Приветствую!
Я работаю над игрой для Android, которая использует Box2D для обнаружения столкновений и физики.Прямо сейчас я внедряю базовую платформерную систему.Прыжки на месте, но у них есть небольшой глюк.Следующая функция предназначена для определения, находится ли игрок на земле.Просто, правда?Ну, это работает хорошо, если только игрок не находится рядом со стеной, в этом случае он просто позволит ему постоянно подпрыгивать, так как функция все равно вернет 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;
}
Итак, есть ли у кого-нибудь указатели начто я могу сделать, чтобы проверка isGounded была более эффективной?
Заранее спасибо!:)