嘿,我正在尝试用 Java 制作一个简单的 ascii 游戏,但我无法让图形在按键时更新
我正在努力让这个人可以用箭头键控制
代码如下
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.Timer;
public class shooter extends JFrame{
int x = 100, y = 100, dx, dy;
Timer time;
/**
*
*/
private static final long serialVersionUID = 1L;
public void move(){
x = x + dx;
y = y + dx;
}
public int getX(){
return x;
}
public int getY(){
return y;
}
public shooter() {
setTitle("title of gip");
setSize(600, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
//keep at bottom
setVisible(true);
//dont code here >:(
}
///////////GRAPHICS ////////////////////
public void paint(Graphics g){
g.clearRect(0, 0, getWidth(), getHeight());
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.white);
g.drawString("☺", getX(), getY());
}
public void paintComponent(Graphics g){
}
//////////////end of graphics//////////////
public void keyPressed(KeyEvent e){
int pressed = e.getKeyCode();
if (pressed == KeyEvent.VK_LEFT){
dx = -1;
}
if (pressed == KeyEvent.VK_RIGHT){
dx = 1;
}
}
public void keyReleased(KeyEvent e){
int rel = e.getKeyCode();
if (rel == KeyEvent.VK_LEFT){
dx = 0;
}
if (rel == KeyEvent.VK_RIGHT){
dx = 0;
}
}
public void actionPerformed(ActionEvent e) {
move();
repaint();
}
public static void main(String[] args){
new shooter();
}
}
请帮忙 谢谢
最佳答案
您还没有为您的框架添加任何 Action 监听器。当这些事件发生时,将调用按下键和执行 Action 的方法,但只能从附加了 Action 监听器或按键监听器的对象中调用。
查看 http://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html .
简而言之,尽管您需要以下内容,public class TryItOut extends JFrame implements ActionListener,KeyListener{
以及构造函数中的 addActionListener(this);
和 addKeyListener (这个);
这样做,然后从那里开始尝试。
关于java图形更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8288897/