Я внедрил и добавил PhysicsCollisionListener
для регистрации, когда снаряд попадает в игрока. Но когда снаряд попадает в игрока. запускается несколько событий. Я добавляю свой слушатель с bulletAppState.getPhysicsSpace().addCollisionListener(collisionListener)
в свой метод simpleInitApp(). Я удаляю снаряд после столкновения.jMonkeyEngine несколько событий столкновения для одиночного столкновения
Что мне нужно сделать, чтобы получить только одно событие для каждого снаряда?
Вот мой код:
public void collision(PhysicsCollisionEvent event) {
//nodeA is a projectile
if(event.getNodeA().getName().startsWith("Projectile")) {
//projectile hits player
if(event.getNodeB().getName().startsWith("Player")) {
onHit(event.getNodeA(), event.getNodeB().getParent().getUserData("player");
}
//projectile hits projectile
else if(event.getNodeB().getName().startsWith("Projectile")) {
return;
}
//in any case, remove projectile
projectileNode.detachChild(event.getNodeA());
bulletAppState.getPhysicsSpace().remove(event.getNodeA());
}
//nodeB is a projectile
if(event.getNodeB().getName().startsWith("Projectile")) {
//projectile hits player
if(event.getNodeA().getName().startsWith("Player")) {
onHit(event.getNodeB(), event.getNodeA().getParent().getUserData("player");
}
//in any case, remove projectile
projectileNode.detachChild(event.getNodeB());
bulletAppState.getPhysicsSpace().remove(event.getNodeB());
}
}
Я переместил процедуры удаления в список подписчиков и теперь это работает. Ваше решение с GhostControl не работает, оно дает мне много конфликтов с Terrain. Но большое спасибо за ваш подробный ответ. – kaetzacoatl