2011-02-26 1 views
0

글쎄, 나는이 게임을 자바로 만들었고 총알을 쏠 때 총과 총알을 움직였다. 다음은 문제가있는 코드 블록입니다.자바로 만든 제 게임은 어떤 이유로 2 개의 스프라이트를 연결하고 있습니까?

case KeyEvent.VK_SPACE: 
     Point2D currentGunPos = sGun.position(); 
     sBullet[bulletNum].setAlive(true); 
     sBullet[bulletNum].setPosition(sGun.position()); 
     sBullet[bulletNum].setVelocity(new Point2D(-5,0)); 
     bulletNum++; 

왜 총을 움직이게합니까?

답변

2

글 머리 기호에서 setPosition 메서드를 호출하기 전에 총 위치 개체를 복제해야합니다.

Point2D currentGunPos = (Point2D)sGun.position().clone(); 
sBullet[bulletNum].setPosition(currentGunPos); 
+0

예프. 오류의 원인은 총의 위치로 총알 위치를 설정 한 경우입니다. 총알을 이동하면 두 위치가 모두 매우 동일한 Point2D 객체로 표시되므로 총 위치가 변경됩니다. MBFG의 솔루션은 총과 총알이 서로 다른 Point2D 객체를 사용하여 위치를 나타내도록 보장하므로 하나의 상태를 변경해도 다른 Point2D 객체의 상태는 변경되지 않습니다. –

+0

또한 Point2D와 비슷한 클래스를 디자인 할 수도 있지만 불변으로 만들면 모든 작업에서 새 인스턴스가 반환됩니다. 그런 식으로 미래의 이러한 문제를 피할 수 있습니다. – johusman

+0

또는'setPosition()'메소드가 매개 변수 객체를 복제하거나 단순히'myPosition.setPosition (pos)'또는 이와 비슷한 것을 사용한다.)'position()'메소드가 이미 복제본을 반환 할 수있다. –