好吧,我正在制作游戏。它基本上是一种“射击游戏”,您可以在其中射击其他玩家。好吧,一切都很好,但是角色的动作让我很烦。在这里不要误会我的意思,我可以对角色的运动进行编程,并且可以正常工作...但是不太流利。让我解释一下“流利”一词。现在,我角色的动作是这样的;如果我按“向右箭头”将字符向右移动,它将一直进行到我不再按该键为止。我想摆脱它,而是想将我的角色在单个KeyPress中向右移动,并且应该一直向右移动,直到我按下“向左箭头”。
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只是Empty的类,我只在其中添加了“ static int ...”和一个构造函数。这些都不重要。
最佳答案
存储最后按下的键。然后调用keyPressed,检查密钥是否与上次存储的密钥相同。如果是这样,请返回,否则进行处理。
在Character类中,创建此成员:
int lastKeyCode;
在您的keyPressed方法中,添加以下内容:
int keyCode = e.getKeyCode();
if (keyCode == lastKeyCode) return;
else lastKeyCode = keyCode ;
并使用您常用的代码。
注意:我不会为您编写程序,只是指向正确的方向。由于您是一个初学者,从长远来看,它将帮助您更好。