gpt4 book ai didi

java - 使用图像和图像图标时关键监听器不工作

转载 作者:行者123 更新时间:2023-12-01 09:16:13 25 4
gpt4 key购买 nike

所以,我使用 ImageIcon 和 Image 来为角色设置动画。到目前为止,我的代码使它看起来像是角色正在运行,但由于我无法弄清楚 KeyListener 不起作用的原因。我这样做已经有一段时间了,我想知道我做错了什么。这是我的代码:*现在我不再上下移动,因为我无法左右移动工作。 velyY 将是 y 的变化。

    import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.MediaTracker;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.*;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
import java.awt.Image;
public class Main extends JPanel implements ActionListener,KeyListener{
ImageIcon images[];
int x = 100;
int y = 5;
int velX;
int velY;
int totalImages =3, currentImage = 0, animationDelay = 160;
Timer animationTimer;
public Main() {
images = new ImageIcon[totalImages];
images[0] = new ImageIcon("standing.png");
images[1] = new ImageIcon("ready.png");
images[2] = new ImageIcon("running.png");
startAnimation();
}

public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics g2 = (Graphics) g;
if (images[currentImage].getImageLoadStatus() == MediaTracker.COMPLETE){
Image img = images[currentImage].getImage();
g2.drawImage(img, x, 407, null);
currentImage = (currentImage + 1) % totalImages;
}
}

public void actionPerformed(ActionEvent e) {
repaint();
x+=velX;
}

public void right(){
velX = 8;
}
public void left(){
velX = -8;
}

public void keyPressed(KeyEvent arg0) {
int code = arg0.getKeyCode();
if (code == KeyEvent.VK_A){
left();
}
if(code == KeyEvent.VK_D){
right();
}
}
public void keyTyped(KeyEvent e){}
public void keyReleased(KeyEvent e){
velX = 0;
velY = 0;
}
public void startAnimation() {
if (animationTimer == null) {
currentImage = 0;
animationTimer = new Timer(animationDelay, this);
animationTimer.start();
} else if (!animationTimer.isRunning())
animationTimer.restart();
}

public void stopAnimation() {
animationTimer.stop();
}

}//end class

最佳答案

如果您希望面板管理按键事件,则必须将 KeyListener 注册到面板。

第二件事是 JPanel 默认情况下不可聚焦,因此您必须使其可聚焦才能接收按键事件。

在您的 Main 构造函数中,只需添加:

setFocusable(true); // make your panel focusable
addKeyListener(this); // register the key listener

关于java - 使用图像和图像图标时关键监听器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40529533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com