2013-10-27 2 views
0

mousePressedmouseDragged 이벤트에 약간의 문제가 있습니다. Space Shooter 게임을 만들려고합니다. 플레이어가 마우스를 누르고 움직여서 쏠 수있게하려고합니다. 큰 문제는 mouseDragged 이벤트가 있다고 생각합니다. 더 구체적으로 : 마우스 버튼을 누르면 mousePressed이 호출되고 완벽하게 실행됩니다. 마우스를 움직이면 (여전히 마우스를 계속 누르고 있습니다) mouseDragged이 들어가서 잘 동작하지만, 마우스를 움직이지 않으면 나는 아직도 눌렀다.) 나의 우주선은 발사를 멈추고 나는 왜 그런지 모르겠다. 자바 게임 - 마우스가 눌려지고 마우스가 끌림

private void initShootingThread(final MouseEvent e) { 
    new Thread() { 
     public void run() { 
      do { 
       playerShoot(e); 
      } while (buttonPressed); 
     } 
    }.start(); 
} 

// // PLAYER SHOOTING EVENTS //// 
public void mouseClicked(MouseEvent e) { 
    playerShoot(e); 
} 

public void mousePressed(MouseEvent e) { 
    buttonPressed = true; 
    initShootingThread(e); 
} 

public void mouseDragged(MouseEvent e) { 
    buttonPressed = false; 
    playerShoot(e); 
} 

public void mouseReleased(MouseEvent e) { 
    buttonPressed = false; 
} 

가 사전에 감사합니다

이 코드입니다!

답변

3

는만큼 당신이 마우스를 드래그 수동

그러나, 당신의 mouseDragged() 방법은 너무 빨리 당신이 당신의 메인 루프 정지를 끌어 중지로 falsebuttonPressed 변수를 설정합니다 있습니다 .. mouseDragged() 방법에서 playerShoot(e) 메소드를 호출.

그래서 buttonPressed 변수를 false로 설정하지 마십시오.

+0

문제는이 총알 같은 위치에서 이동합니다 우주선을 멀리 옮겨야한다는 사실. [link] (http://s1318.photobucket.com/user/Andy19505/media/Game_zps72b9ee10.jpg.html). 이것이 내가 의미하는 바입니다. – Andy

+0

그래서 문제를 해결하십시오. playerShoot (e) 코드가 잘못되어 있어야합니다. 두 버전이 필요할 수 있습니다. 하나는 mousePressed이고 다른 하나는 mouseDragged()입니다. 우리는 코드에 액세스 할 수 없으므로 기본적인 디버깅을 스스로해야합니다. 우리는 올바른 방향으로 당신을 지적했습니다. – camickr

+0

답장을 보내 주셔서 감사합니다. 해결책을 제시하려고합니다. 합리적인 기간에 찾을 수 있다면 게시 해 드리겠습니다. ;) – Andy

0

마지막으로 답변을 찾았습니다! camickr 당신이 옳았 어, 내 문제는 playerShoot 방법에 있었다. 메서드 매개 변수의 MouseEvent e이 우주선의 위치와 총알 시작 위치를 처리하고 있으며 final이므로 메서드가 호출 될 때 올바르게 업데이트되지 않았다고 생각합니다. 이제 선박의 위치가 xy 변수에 따라 "수동으로"업데이트됩니다.

지금 내 코드는 다음과 같은 것입니다하고 그것이 마치 마법처럼 작동합니다 : 상관없이 내가의 mouseDragged에서의 buttonPressed가 = false를 넣어하지 않는 경우

private void initShootingThread() { 
    new Thread() { 
     public void run() { 
      do { 
       playerShoot(); 
      } while (buttonPressed); 
     } 
    }.start(); 
} 

// // PLAYER SHOOTING EVENTS //// 
public void mouseClicked(MouseEvent e) { 
    playerShoot(e); 
    x = e.getX(); 
    y = e.getY(); 
} 

public void mousePressed(MouseEvent e) { 
    buttonPressed = true; 
    initShootingThread(); 
    x = e.getX(); 
    y = e.getY(); 
} 

public void mouseDragged(MouseEvent e) { 
    playerShoot(); 
    x = e.getX(); 
    y = e.getY(); 
} 

public void mouseReleased(MouseEvent e) { 
    buttonPressed = false; 
} 

public void mouseMoved(MouseEvent e) { 
    x = e.getX(); 
    y = e.getY(); 
} 
관련 문제