繁体   English   中英

如何在按住键的同时阻止对象移动

[英]How to stop object from moving while key is still pressed

我是Java编程的初学者,我正在制作一个应用程序,要求对象在充满正方形的网格周围移动。

对象一次只能移动一个正方形,如果用户想移动到另一个正方形,则必须再次按下该键。 我的移动方法如下:

public void move() {
    x += dx;
    y += dy;
}

我正在使用KeyListener接口来实现keyPressed,keyTyped和keyReleased方法,并且我的条件类似于KeyPressed内下面片段中的条件

//KeyPressed
int c = e.getKeyCode();

if (c == KeyEvent.VK_UP) {
    player.setDy(-5);
}

这使对象可以自由移动。 但是,只要按下UP箭头,它显然就会继续移动。

有什么办法可以使对象说-5一次就移动,然后即使仍然按下该键也要停止吗?

我不确定是否需要更改move方法或KeyListener方法来执行此操作。

我希望我对所要问的问题已经足够清楚了,对我提出的任何建议,我将深表感谢。

最简单的方法是添加一个布尔值,以指示按下了移动键

类成员: boolean movingKeyPressed = false

在按下的键中:

if (movingKeyPressed) {
   return;
} else {
   // do stuff
   movingKeyPressed = true;
}

在关键释放方法中:

movingKeyPressed = false;

首先:如果您从诸如keyPressedkeyReleased之类的侦听器中调用类方法,则应该使用Synchronization-那是因为可以从多个线程调用侦听器方法,因此您的类方法( player.setDy() )可以(并且将)被并行调用-您需要确保每次调用setDy都在下一个调用之前进行。

另外: keyTyped在许多情况下要好得多: https : keyTyped

一个示例可能如下所示:

public void keyTyped(KeyEvent arg0) {
   if(arg0.getKeyCode() == KeyEvent.VK_UP)
   {
       synchronized(player)
       {
          player.setDy(-5);
       }
   }
}

这将顺序可靠地调用setDy 现在您需要做的就是确保setDy可以按预期工作,因此仅设置一次位置

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM