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的代码,如果你能修复它们,我将非常感谢你