按下时重试按钮可以重置所有内容,但一切都变得更快

时间:2016-07-29 13:29:18

标签: java swing

所以,我遇到了一个问题,一个Try Again按钮会显示在Game Over屏幕上,当点击时将所有内容重置为初始值。现在问题已经部分解决了,但每次点击它都会变得疯狂,每次点击都会越来越快。

这是我的类中的代码进行初始化:

public class game extends JPanel implements ActionListener{


private static final long serialVersionUID = 1L;
private Menu menu;
private GameOver gameover;


//variables
public static int cyclesToWait = 50;
public static int enemiesKilled = 0;
public static int life = 3;
int roundCount = 0;
Timer gamelooptimer;

//objects
Player p;
ControllerEnemy c;
ControllerRocket r;
ControllerExplosion e;


//is it new round or not --> for enemy control
public static enum ROUND{
    INPROGRESS,
    NEW
}

public static enum STATE{
    MENU,
    GAME,
    OVER
};

public static STATE State = STATE.MENU;
public static ROUND Round = ROUND.INPROGRESS;

public game(){

    setFocusable(true);

    initGame();
}

public void resetGame(){
    initGame();
}

private void initGame(){
    enemiesKilled = 0;
    life = 3;
    roundCount = 0;
    gamelooptimer = new Timer(10, this);
    gamelooptimer.start();

    p = new Player(MainClass.width / 2 - 60, 400);
    c = new ControllerEnemy();
    r = new ControllerRocket();
    e = new ControllerExplosion();
    menu = new Menu();
    gameover = new GameOver();

    addKeyListener(new KeyInput(p));
    addMouseListener(new MouseInput());
}

public void paint(Graphics g){
    super.paint(g);
    Graphics2D g2d = (Graphics2D) g;
    g2d.drawImage(getBackgroundImage(), 0, 0, null);

    Font fnt = new Font("arial", Font.BOLD, 22);
    g.setFont(fnt);


    if(State == STATE.GAME){
        p.draw(g2d);
        c.draw(g2d);
        r.draw(g2d);
        e.draw(g2d);
        g.drawString("Round: " + roundCount, MainClass.width - 125, 22);
        g.drawString("Enemies Killed: " + enemiesKilled, MainClass.width/2 - 95, 22);
        if(cyclesToWait < 50)
            cyclesToWait++;
    }
    else if (State == STATE.OVER)
        gameover.render(g);
    else
        menu.render(g);


}



@Override
public void actionPerformed(ActionEvent e) {
    repaint();
    if(State == STATE.GAME){    
        p.update();
        c.update();
        r.update();
    }
    if(Round == ROUND.NEW)
        roundCount += 1;
}
private Image getBackgroundImage(){
    ImageIcon i = new ImageIcon(getClass().getResource("/images/Background.png"));
    return i.getImage();
}

从另一个类调用resetGame()。

0 个答案:

没有答案