발사체가 플레이어를 때릴 때 등록하기 위해 PhysicsCollisionListener
을 구현하고 추가했습니다. 그러나 발사체가 플레이어를 때릴 때. 여러 이벤트가 트리거됩니다. 내 SimpleInitApp() 메소드에 bulletAppState.getPhysicsSpace().addCollisionListener(collisionListener)
과 함께 리스너를 추가합니다. 충돌 후 발사체를 제거합니다.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