Java游戏点击按钮只有一次

时间:2015-11-30 18:59:05

标签: java keypress 2d-games

大家好我正在编写一个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);
    }
}

1 个答案:

答案 0 :(得分: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);
    }
}