Java 游戏只点击一次按钮
Java game hit button only once
大家好,我正在编写一个 2D 游戏(马里奥克隆),我遇到了一个小问题:
有没有办法消除这样一个事实,即如果我按下开火按钮并一直按住它,它就会开始产生数百万个火球?
非常感谢任何帮助,非常感谢。
编辑:代码
public void keyPressed(KeyEvent e){
int key = e.getKeyCode();
for (int i = 0; i < handler.object.size(); i++){
GameObject tempObject = handler.object.get(i);
if (tempObject.getId() == ObjectId.Player){
if(key == KeyEvent.VK_D) tempObject.setVelX(5);
if(key == KeyEvent.VK_A) tempObject.setVelX(-5);
if(key == KeyEvent.VK_W && !tempObject.isJumping()) {
tempObject.setJumping(true);
tempObject.setVelY(-13);
}
if(key == KeyEvent.VK_SPACE){
int velocity = tempObject.getLookingLR() * 5;
float posX = tempObject.getX() + velocity;
float posY =tempObject.getY()+32;
handler.addObject(new Bullet(posX,posY, ObjectId.Bullet, velocity,handler));
tempObject.setFiring(true);
}
}
}
if(key == KeyEvent.VK_ESCAPE){
System.exit(1);
}
}
你快搞定了。您实际上并没有检查玩家的对象以查看它是否在开火:
if(key == KeyEvent.VK_SPACE){
int velocity = tempObject.getLookingLR() * 5;
float posX = tempObject.getX() + velocity;
float posY =tempObject.getY()+32;
handler.addObject(new Bullet(posX,posY, ObjectId.Bullet, velocity,handler));
tempObject.setFiring(true);
}
应该是:
if(key == KeyEvent.VK_SPACE && !tempObject.isFiring()){
int velocity = tempObject.getLookingLR() * 5;
float posX = tempObject.getX() + velocity;
float posY =tempObject.getY()+32;
handler.addObject(new Bullet(posX,posY, ObjectId.Bullet, velocity,handler));
tempObject.setFiring(true);
}
您还需要添加一个 keyReleased
方法,将 firing
设置为 false
:
public void keyReleased(KeyEvent e) {
//your code for getting key event and finding the player Object
if(key == KeyEvent.VK_SPACE) {
//Do any necessary cleanup of the firing here
tempObject.setFiring(false);
}
}
大家好,我正在编写一个 2D 游戏(马里奥克隆),我遇到了一个小问题: 有没有办法消除这样一个事实,即如果我按下开火按钮并一直按住它,它就会开始产生数百万个火球?
非常感谢任何帮助,非常感谢。
编辑:代码
public void keyPressed(KeyEvent e){
int key = e.getKeyCode();
for (int i = 0; i < handler.object.size(); i++){
GameObject tempObject = handler.object.get(i);
if (tempObject.getId() == ObjectId.Player){
if(key == KeyEvent.VK_D) tempObject.setVelX(5);
if(key == KeyEvent.VK_A) tempObject.setVelX(-5);
if(key == KeyEvent.VK_W && !tempObject.isJumping()) {
tempObject.setJumping(true);
tempObject.setVelY(-13);
}
if(key == KeyEvent.VK_SPACE){
int velocity = tempObject.getLookingLR() * 5;
float posX = tempObject.getX() + velocity;
float posY =tempObject.getY()+32;
handler.addObject(new Bullet(posX,posY, ObjectId.Bullet, velocity,handler));
tempObject.setFiring(true);
}
}
}
if(key == KeyEvent.VK_ESCAPE){
System.exit(1);
}
}
你快搞定了。您实际上并没有检查玩家的对象以查看它是否在开火:
if(key == KeyEvent.VK_SPACE){
int velocity = tempObject.getLookingLR() * 5;
float posX = tempObject.getX() + velocity;
float posY =tempObject.getY()+32;
handler.addObject(new Bullet(posX,posY, ObjectId.Bullet, velocity,handler));
tempObject.setFiring(true);
}
应该是:
if(key == KeyEvent.VK_SPACE && !tempObject.isFiring()){
int velocity = tempObject.getLookingLR() * 5;
float posX = tempObject.getX() + velocity;
float posY =tempObject.getY()+32;
handler.addObject(new Bullet(posX,posY, ObjectId.Bullet, velocity,handler));
tempObject.setFiring(true);
}
您还需要添加一个 keyReleased
方法,将 firing
设置为 false
:
public void keyReleased(KeyEvent e) {
//your code for getting key event and finding the player Object
if(key == KeyEvent.VK_SPACE) {
//Do any necessary cleanup of the firing here
tempObject.setFiring(false);
}
}