我的KeyPressed不在Java中工作
问题描述:
我正在用java创建一个游戏,只是为了我自己的享受,当我按下运动键时,我选择了矩形在屏幕上不动。这是我的第一类我的KeyPressed不在Java中工作
package Game;
import java.awt.*;
import javax.swing.*;
import Game.Player;
public class Frame {
public static void main(String[] args) {
JFrame f = new JFrame();
Player pl = new Player();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setResizable(false);
f.setSize(600, 600);
f.setTitle("Filler");
f.add(pl);
f.setVisible(true);
}
}
我的第二类
package Game;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Player extends JPanel implements ActionListener, KeyListener {
Timer t = new Timer(5,this);
double x = 0, y = 0, velx = 0, vely = 0;
public Player(){
t.start();
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
}
public void paintComponent (Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.RED);
g2.fillRect(40, 40, 20, 30);
}
@Override
public void keyReleased(KeyEvent e) {
velx = 0;
vely = 0;
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void actionPerformed(ActionEvent e) {
x += velx;
y += vely;
repaint();
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_D){
velx = 1.5;
vely = 0;
}
else if(e.getKeyCode() == KeyEvent.VK_A){
velx = -1.5;
vely = 0;
}
else if(e.getKeyCode() == KeyEvent.VK_W){
vely = -1.5;
velx = 0;
}
}
}
我会在以后添加更多的类,但是这是我现在所拥有的。有人可以帮帮我吗。
答
这跟KeyListener
没什么关系,不管x
和y
是什么,你都画了矩形。如果用变量x
和y
替换矩形的x和y值,它可以正常工作。
public void paintComponent (Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.RED);
g2.fillRect((int)x, (int)y, 20, 30); // change line here
}