调整按下的键所以你不能 "Hold"
Adjust Key Pressed So You Cant "Hold" it
不确定标题的措辞。
我有一些 "space invaders" 类型游戏的代码。我做了整件事只是做了调整。要射击,我使用空格键。问题是我无法按住空格键并且它不断射击。我宁愿多次按下它(如果我按住它.. 为了它不会连续发射)我该如何改变它?
*这是我认为是问题根源的代码。如果来源位于其他地方,请说明。
private class KeyInputHandler extends KeyAdapter {
private int pressCount = 1;
/**
* key pressed
*/
public void keyPressed(KeyEvent e) {
if (waitingForKeyPress) {
return;
}
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
leftPressed = true;
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
rightPressed = true;
}
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
firePressed = true;
}
}
/**
* Key Released
*/
public void keyReleased(KeyEvent e) {
if (waitingForKeyPress) {
return;
}
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
leftPressed = false;
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
rightPressed = false;
}
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
firePressed = false;
}
}
添加代码
public class ShotEntity extends Entity {
//vertical speed
private double moveSpeed = -300;
private Game game;
private boolean used = false;
/**
* Create a new shot from the player
*/
public ShotEntity(Game game,String sprite,int x,int y) {
super(sprite,x,y);
this.game = game;
dy = moveSpeed;
}
/**
* Request that this shot moved based on time
*/
public void move(long delta) {
super.move(delta);
if (y < -100) {
game.removeEntity(this);
}
}
//collision
public void collidedWith(Entity other) {
// prevents double kills.
if (used) {
return;
}
// alien killed
if (other instanceof AlienEntity) {
game.removeEntity(this);
game.removeEntity(other);
game.notifyAlienKilled();
used = true;
}
}
}
很简单,只要有一个布尔变量就可以让飞船只有在为真时才开火。然后在按下 space 栏时将其设置为 true,并在船射击时将其设置为 false。我无法向您展示如何在您的程序中实现它,因为我不知道您的拍摄方法是如何工作的。但是,如果你要post到时候让船开火的方法,我可以告诉你如何实现它,或者你可以自己试试。
监听两个 单独的按键事件。按下键时一键,松开键时一键。现在,你做一个布尔值。
public 布尔值 myBoolean;
按下按键时,将布尔值设置为 true (myBoolean==true
),如果松开,则将其设置为 false (myBoolean==false
).
现在,创建一个简单的 if 语句:
if(myBoolean==true){ //Key is being held down
//execute this code
//Have nothing be done
}
就是这样!
P.S。如果需要,您可以使用一种 单独的方法 来清理代码。这个方法可以改变布尔值:
public void changeValueOfBoolean(Boolean b){
if(b = true){
return false;
}
if(b==false){
return true;
}
}
很简单。如果您需要任何帮助,请告诉我,如果这对您有帮助,请将其设为最佳答案。有任何问题随时问我,我很乐意提供帮助!
说明:
好的,我们有这个布尔值,对吧?现在,这个布尔值本质上决定了是否按下了键。
假设我们按下按钮:
因为按键被按住,所以我们将布尔值 myBoolean
设为真。现在,因为用户按住了键,我们不想做任何事情,对吗?这就是我们创建 if 语句的原因:
if(myBoolean==true){ //Key is being held down
//execute this code
//Have nothing be done
}
它说,如果布尔值是真的,那么我们什么都不做。回想一下,当按键被按下时布尔值是真的,还记得吗?所以,当按键被按下时,布尔值为真,什么也不会做。
现在,当用户释放按键时:
现在,假设用户按下了键。这将调用两个侦听器。一个侦听器用于按下,另一个用于释放。如果用户只是按下键,myBoolean 将以 false 结束,因为他们已经松开键。因此,我们可以在 myBoolean 为 false 时执行一些代码(射击)。
**总结:
myBoolean
当按键被按住时为真。所以,当它为真时,我们什么都不做。当用户松开钥匙时,myBoolean
为 false,我们会在那里射击 space 入侵者。**
不确定标题的措辞。
我有一些 "space invaders" 类型游戏的代码。我做了整件事只是做了调整。要射击,我使用空格键。问题是我无法按住空格键并且它不断射击。我宁愿多次按下它(如果我按住它.. 为了它不会连续发射)我该如何改变它?
*这是我认为是问题根源的代码。如果来源位于其他地方,请说明。
private class KeyInputHandler extends KeyAdapter {
private int pressCount = 1;
/**
* key pressed
*/
public void keyPressed(KeyEvent e) {
if (waitingForKeyPress) {
return;
}
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
leftPressed = true;
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
rightPressed = true;
}
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
firePressed = true;
}
}
/**
* Key Released
*/
public void keyReleased(KeyEvent e) {
if (waitingForKeyPress) {
return;
}
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
leftPressed = false;
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
rightPressed = false;
}
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
firePressed = false;
}
}
添加代码
public class ShotEntity extends Entity {
//vertical speed
private double moveSpeed = -300;
private Game game;
private boolean used = false;
/**
* Create a new shot from the player
*/
public ShotEntity(Game game,String sprite,int x,int y) {
super(sprite,x,y);
this.game = game;
dy = moveSpeed;
}
/**
* Request that this shot moved based on time
*/
public void move(long delta) {
super.move(delta);
if (y < -100) {
game.removeEntity(this);
}
}
//collision
public void collidedWith(Entity other) {
// prevents double kills.
if (used) {
return;
}
// alien killed
if (other instanceof AlienEntity) {
game.removeEntity(this);
game.removeEntity(other);
game.notifyAlienKilled();
used = true;
}
}
}
很简单,只要有一个布尔变量就可以让飞船只有在为真时才开火。然后在按下 space 栏时将其设置为 true,并在船射击时将其设置为 false。我无法向您展示如何在您的程序中实现它,因为我不知道您的拍摄方法是如何工作的。但是,如果你要post到时候让船开火的方法,我可以告诉你如何实现它,或者你可以自己试试。
监听两个 单独的按键事件。按下键时一键,松开键时一键。现在,你做一个布尔值。
public 布尔值 myBoolean;
按下按键时,将布尔值设置为 true (myBoolean==true
),如果松开,则将其设置为 false (myBoolean==false
).
现在,创建一个简单的 if 语句:
if(myBoolean==true){ //Key is being held down
//execute this code
//Have nothing be done
}
就是这样!
P.S。如果需要,您可以使用一种 单独的方法 来清理代码。这个方法可以改变布尔值:
public void changeValueOfBoolean(Boolean b){
if(b = true){
return false;
}
if(b==false){
return true;
}
}
很简单。如果您需要任何帮助,请告诉我,如果这对您有帮助,请将其设为最佳答案。有任何问题随时问我,我很乐意提供帮助!
说明:
好的,我们有这个布尔值,对吧?现在,这个布尔值本质上决定了是否按下了键。
假设我们按下按钮:
因为按键被按住,所以我们将布尔值 myBoolean
设为真。现在,因为用户按住了键,我们不想做任何事情,对吗?这就是我们创建 if 语句的原因:
if(myBoolean==true){ //Key is being held down
//execute this code
//Have nothing be done
}
它说,如果布尔值是真的,那么我们什么都不做。回想一下,当按键被按下时布尔值是真的,还记得吗?所以,当按键被按下时,布尔值为真,什么也不会做。
现在,当用户释放按键时:
现在,假设用户按下了键。这将调用两个侦听器。一个侦听器用于按下,另一个用于释放。如果用户只是按下键,myBoolean 将以 false 结束,因为他们已经松开键。因此,我们可以在 myBoolean 为 false 时执行一些代码(射击)。
**总结:
myBoolean
当按键被按住时为真。所以,当它为真时,我们什么都不做。当用户松开钥匙时,myBoolean
为 false,我们会在那里射击 space 入侵者。**