2013-10-27 4 views
0

У меня есть некоторые проблемы с событиями mousePressed и mouseDragged. Я пытаюсь создать игру Space Shooter, и я хочу, чтобы игрок мог снимать, нажимая и двигаясь по мыши. Большая проблема, по-моему, у меня есть с событием mouseDragged. Чтобы быть более конкретным: когда я нажимаю кнопку мыши, вызывается mousePressed, и он работает отлично, а затем, когда я перемещаю мышь вокруг (все еще удерживая нажатой клавишу мыши), mouseDragged входит и отлично работает, но когда я перестаю перемещать мышь (заметьте, что я все еще нажимаю) мой космический корабль перестает стрелять, и я не знаю, почему.Java Game - Мышь нажата и мышь перетащили

Это код:

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

Пока вы тащите мышь вручную вызвать метод playerShoot(e) от метода mouseDragged() ..

Однако ваш метод mouseDragged() устанавливает свой buttonPressed переменной false так, как только вы прекратите перетаскивание ваших основных остановки цикла.

Поэтому не устанавливайте для параметра buttonPressed значение false.

+0

Проблема заключается в том, если я не ставлю buttonPressed = ложь в mouseDragged, пули будут идти в том же месте, независимо от того, тот факт, что я покидаю Космический корабль. [Ссылка] (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 Я не думаю, что он корректно обновлялся при вызове метода. Теперь положение корабля обновляется «вручную» соответственно x и y переменных.

Теперь мой код что-то вроде этого, и он работает как шарм:

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(); 
} 
Смежные вопросы