[code=java]packagemyGame;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;classFightFaceextendsJFrame{privateImageIconmyPlaner=newImageIcon("src/myGame/image/玩...
[code=java]
package myGame;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class FightFace extends JFrame {
private ImageIcon myPlaner = new ImageIcon("src/myGame/image/玩家飞机小.png");
private static int x=160,y=550;// 飞机的坐标
final int moveSize = 1;// 按键一次移动的距离
Image offScreenImage = null;
@Override
public void update(Graphics g) {
if(offScreenImage == null) {
offScreenImage = this.createImage(30,24);
}
Graphics gOff = offScreenImage.getGraphics();
paint(gOff);
g.drawImage(offScreenImage, 0, 0, null);
}
@Override
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.GRAY);
g.fillRect(0, 0, getWidth(), getHeight());
g.drawImage(myPlaner.getImage(), x, y, this);
this.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e){
super.keyPressed(e);
int key = e.getKeyCode();
switch(key){
case KeyEvent.VK_DOWN:
FightFace.y += moveSize;
repaint();break;
case KeyEvent.VK_UP:
FightFace.y -= moveSize;
repaint();break;
case KeyEvent.VK_LEFT:
FightFace.x -= moveSize;
repaint();break;
case KeyEvent.VK_RIGHT:
FightFace.x += moveSize;
repaint();break;
default: break;
}
}
@Override
public void keyReleased(KeyEvent e) {
super.keyReleased(e);
}
});
}
public static void main(String[] args) {
FightFace frame = new FightFace();
frame.setTitle("MyGame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 600);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
[/code]
这里按键之后,每次移动的距离会累积起来,而不是每次都移动moveSize大小,为什么?求大神告诉怎么解决。
展开