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++;
왜 총을 움직이게합니까?
예프. 오류의 원인은 총의 위치로 총알 위치를 설정 한 경우입니다. 총알을 이동하면 두 위치가 모두 매우 동일한 Point2D 객체로 표시되므로 총 위치가 변경됩니다. MBFG의 솔루션은 총과 총알이 서로 다른 Point2D 객체를 사용하여 위치를 나타내도록 보장하므로 하나의 상태를 변경해도 다른 Point2D 객체의 상태는 변경되지 않습니다. –
또한 Point2D와 비슷한 클래스를 디자인 할 수도 있지만 불변으로 만들면 모든 작업에서 새 인스턴스가 반환됩니다. 그런 식으로 미래의 이러한 문제를 피할 수 있습니다. – johusman
또는'setPosition()'메소드가 매개 변수 객체를 복제하거나 단순히'myPosition.setPosition (pos)'또는 이와 비슷한 것을 사용한다.)'position()'메소드가 이미 복제본을 반환 할 수있다. –