我正在网上做一个教程,因为我想制作一个2d侧卷轴,我得到了这个确切的错误。我用Google搜索了它,但没有提出任何问题。我试着寻找一个拼写错误,它看起来很干净,它没有给我一个错误代码中的其他任何东西。我不知道从哪里开始。如果你能向我解释错误是什么以及我如何解决它,那将是惊人的。
package Main;
import GameState.GameStateManager;
import javax.swing.JPanel;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
public class GamePanel extends JPanel implements Runnable, KeyListener{
public static final int WIDTH = 320;
public static final int HIGHT = 240;
public static final int SCALE = 2;
//game thread
private Thread thread;
private boolean running;
private int FPS = 60;
private long targetTime = 1000/FPS;
//image
private BufferedImage image;
private Graphics2D g;
//game state manager
private GameStateManager gsm;
public GamePanel(){
super();
setPreferredSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE));
setFocusable(true);
requestFocus();
}
public void addNotify(){
super.addNotify();
if (thread == null) {
thread = new Thread(this);
addKeyListener(this);
thread.start();
}
}
private void init() {
image = new BufferedImage(WIDTH, HIGHT, BufferedImage.TYPE_INT_RGB);
g = (Graphics2D) image.getGraphics();
running = true;
gsm = new GameStateManager();
}
public void run(){
init();
long start, elapsed, wait;
//game loop
while(running) {
start = System.nanoTime();
update();
draw();
drawToScreen();
elapsed = System.nanoTime() - start;
wait = targetTime - elapsed / 1000000;
try
{
Thread.sleep(wait);
}
catch(Exception e)
{
e.printStackTrace();
}//end of try catch
}
}
private void update()
{
gsm.update();
}
private void draw()
{
gsm.draw(g);
}
private void drawToScreen()
{
Graphics g2 = getGraphics();
g2.drawImage(image, 0, 0, null);
g2.dispose();
}
public void KeyPressed(KeyEvent key)
{
gsm.keyPressed(key.getKeyCode());
}
public void KeyReleased(KeyEvent key)
{
gsm.keyReleased(key.getKeyCode());
}
}
答案 0 :(得分:3)
编译器错误消息告诉您完全错误:您的类实现了KeyListener接口,但没有实现接口的所有必要方法。解决方案:确保按照KeyListener API实现所有必需的方法。另外,请务必使用@Override
注释以确保覆盖正确。
话虽如此,我建议您不使用KeyListeners进行Swing应用程序的大多数键盘输入,它是一个低级别的监听器,应该避免使用更高级别的结构,例如key bindings。此外,Swing GUI应该避免使用update(...)
方法覆盖,因为这更像是一个AWT结构。
答案 1 :(得分:0)
您的KeyReleased(KeyEvent key)
方法必须以小写字母'k'开头,例如keyReleased(KeyEvent key)
。 Java区分大小写。
您可能还需要覆盖KeyListener接口的其他方法。
当您要覆盖超级方法时,还要将@Override注释(由@Hovercraft Full Of Eels建议)添加到方法中。这样,IDE会在编码时给你提示。