嗯,我现在正在做一个游戏。它基本上是一个"射击游戏",您可以在其中射击其他玩家。好吧,一切都很好,但角色的动作让我很烦恼。不要在这里理解我的意思,我可以对角色的运动进行编程,而且它有点工作......但不流利。让我解释一下"流利"这个词。现在,我的角色的动作是这样的;如果我按"向右箭头"将字符向右移动,它会一直持续到我不再按键为止。我想摆脱它,相反,我想在一次按键中向右移动我的字符,它应该一直向右移动,直到我按下"向左箭头"。
public class Character extends Main implements KeyListener {
int x;
int y;
int width;
int height;
public Character() {
this.x = 250;
this.y = 400;
this.width = 30;
this.height = 30;
addKeyListener(this);
setFocusable(true);
setVisible(true);
}
public void paint(Graphics g) {
super.paint(g);
Graphics2D mainGraphics = (Graphics2D) g;
mainGraphics.setColor(Color.BLUE);
mainGraphics.fillRect(this.x, this.y, this.width, this.height);
mainGraphics.setColor(Color.GREEN);
mainGraphics.fillRect(Enemy.xEnemy, Enemy.yEnemy, Enemy.widthEnemy, Enemy.heightEnemy);
mainGraphics.setColor(Color.RED);
mainGraphics.fillRect(Fire.xFire, Fire.yFire, Fire.widthFire, Fire.heightFire);
mainGraphics.setColor(Color.RED);
mainGraphics.fillRect(FireEnemy.xFireEnemy, FireEnemy.yFireEnemy, FireEnemy.widthFireEnemy, FireEnemy.heightFireEnemy);
}
public void keyReleased(KeyEvent arg0) {
}
public void keyTyped(KeyEvent arg0) {
}
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if(keyCode == e.VK_LEFT) {
this.x = this.x - 10;
Fire.xFire -= 10;
}
else if(keyCode == e.VK_RIGHT) {
this.x = this.x + 10;
Fire.xFire += 10;
}
else if(keyCode == e.VK_A) {
Enemy.xEnemy -= 10;
FireEnemy.xFireEnemy -= 10;
}
else if(keyCode == e.VK_D) {
Enemy.xEnemy += 10;
FireEnemy.xFireEnemy += 10;
}
else if(keyCode == e.VK_P) {
Fire.xFire = this.x;
Fire.yFire = Fire.yFire - 45;
if(this.x == Enemy.xEnemy && Fire.yFire <= Enemy.yEnemy) {
System.out.println("Player 1 won");
}
}
else if(keyCode == e.VK_W) {
FireEnemy.xFireEnemy = FireEnemy.xFireEnemy + 0;
for(int i = 0; i<2; i++) {
FireEnemy.yFireEnemy = FireEnemy.yFireEnemy + 45;
}
if(Enemy.xEnemy == this.x && FireEnemy.yFireEnemy >= this.y) {
System.out.println("Player 2 won");
}
}
repaint();
}
}
我的主要课程
public class Main extends JPanel {
public static void main(String[] args) {
JFrame window = new JFrame();
Character character = new Character();
Enemy enemy = new Enemy();
Fire fire = new Fire();
FireEnemy fireEnemy = new FireEnemy();
window.setBounds(10, 10, 500, 500);
window.setBackground(Color.DARK_GRAY);
window.setResizable(false);
window.setVisible(true);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.add(character);
}
}
Fire,FireEnemy,Enemy只是空的类,我只是在其中放了"static int..."和一个构造函数。其中没有什么重要的东西。
存储上次按下的键。然后按键被调用,检查键是否与上次存储的相同。如果是这样,请返回,否则处理它。
在 Character 类中,创建以下成员:
int lastKeyCode;
在 keyPress 方法中,添加如下内容:
int keyCode = e.getKeyCode();
if (keyCode == lastKeyCode) return;
else lastKeyCode = keyCode ;
并使用您拥有的代码。注意:我不会为你编写程序,只是为你指出正确的方向。由于您是初学者,从长远来看,它会更好地帮助您。