私は別のスレッドで入力操作をしたい、私はどのようなメソッドを実行する必要がありますか?それともこれを行うより良い方法かもしれませんか?別のスレッドでkeylistenerを使用するには?
public class Player implements Runnable, KeyListener{
int speed;
public Player()
{
speed = 0;
}
@Override
public void run()
{
//what should i write here?
}
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyPressed(KeyEvent e)
{
startMove(e);
}
@Override
public void keyReleased(KeyEvent e)
{
endMove(e);
}
public void startMove(KeyEvent e)
{
int key = e.getKeyCode();
switch (key) {
case KeyEvent.VK_W:
speed = 2;
break;
case KeyEvent.VK_S:
speed = -2;
break;
default:
break;
}
}
public void endMove(KeyEvent e)
{
int key = e.getKeyCode();
if(key == KeyEvent.VK_W)
speed = 0;
if(key == KeyEvent.VK_S)
speed = 0;
}
}
このコードは、キーイベントを検出し、キーコードコールstartMove()またはendMove()関数に依存しなければなりません。そして、それはすべて同じスレッドになければなりません。実行中にループを使用し、何らかの形で関数を置く必要がありますか?
何か理由がない限り、スレッドの代わりに 'Timer'を使うべきです。 https://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html – Radiodef
@Radiodefですが、メインスレッドにはありますか? – AnorLondo