我想在不同的线程中输入操作,我应该写入run方法?或者可能是更好的方法吗?
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()函数。而这一切都应该在同一个线程中。我应该使用while循环运行然后以某种方式放置功能?
答案 0 :(得分:0)
我认为你的设计是“好转”。
首先,在AWT event dispatcher thread中,UI事件始终归结为您。
您的代码正在做什么:更改某些Player对象的速度。哪里需要另一个线程?
含义:你应该已经使用了其他一些“游戏控制器线程”。在该线程中运行的代码只需检查该'%'
字段的值;并利用它。
核心是:你的开始/结束方法只是改变一个字段;那很好。你应该保持这种方式。并且根据这些鼠标事件改变的速度,在该类之外的其他代码“做它的事情”。