Java小程序-在屏幕上移动球
好的,如何使用小程序从键盘移动球 到目前为止,我有这个代码,它什么都不做Java小程序-在屏幕上移动球,java,applet,Java,Applet,好的,如何使用小程序从键盘移动球 到目前为止,我有这个代码,它什么都不做 import java.applet.*; import java.awt.*; import java.awt.event.*; public class KeyboardGame extends Applet implements KeyListener { private static final long serialVersionUID = 1L; private static boolean
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class KeyboardGame extends Applet implements KeyListener
{
private static final long serialVersionUID = 1L;
private static boolean keyboadrRightPressed = false;
public void init()
{
addKeyListener(this);
}
public void keyPressed(KeyEvent e)
{
int keyCode = e.getKeyCode();
if(keyCode == KeyEvent.VK_RIGHT)
{
keyboadrRightPressed = true;
}
else
{
keyboadrRightPressed = false;
}
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}
public void paint(Graphics g)
{
g.fillOval(20,20,20,20);
g.drawString("String :"+keyboadrRightPressed,20,30);
}
}
我还必须了解它是如何工作的。我不明白为什么我的动作监听器不工作,我需要一个
while(true)
或者线程?您的操作侦听器实际上可能工作正常,但您需要在按下该键时重新绘制小程序,以便实际显示字符串。尝试将按下的键更改为:
public void keyPressed(KeyEvent e)
{
int keyCode = e.getKeyCode();
if(keyCode == KeyEvent.VK_RIGHT)
{
keyboadrRightPressed = true;
}
else
{
keyboadrRightPressed = false;
}
repaint();
}
实际移动球的方式会有所不同,具体取决于您希望球实际移动的方式。我猜你希望它在按住键的同时继续向右移动,所以我要做的是实现一个计时器或其他形式的线程,每隔.25秒(或你想要多长时间)检查键盘右键,如果是真的,它会将球向右移动。然后,在代码的keyReleased部分,您还应该添加逻辑,以便在松开按键时将keyboardRightPressed设置为false。我这样做了,我实际上看到它在开始时有一点保持,球移动1个像素,等待0.5秒,直到连续移动,我应该使用线程来解决我的问题吗?暂停是因为键盘事件的工作方式。当您考虑在文本编辑器中键入时,如果您按住“a”键,它将键入一个a,暂停片刻,然后开始添加一组a。所以是的,我会使用一个线程,你可以让它以一致的间隔执行,这样你就不会有那么小的延迟。您还需要将repaint()函数调用移动到实际移动球的线程中,以便在球移动时重新绘制,而不是在检测到按键时重新绘制。好的,我做了很多事情,包括线程,但我不知道如何从键盘将球平滑地移动到屏幕上,它有延迟…所以在keyCode==KeyEvent.VK_RIGHT){keyboadrrightspressed=true;}在keyereleased中,您有类似于:if(keyCode==KeyEvent.VK_RIGHT){keyboadrrightspressed=false;}的内容,在线程中有类似于:while的内容(true){if(keyboadrrightspressed==true){ball.x+=5;repaint();}Thread.sleep(250);}这就是你拥有的吗?是的,这些是Main.java和KeyThread.java的代码,如果你能修复它们,我将非常感谢你