如何始终将GUI项设置为前端?

时间:2018-06-03 09:32:31

标签: java swing user-interface game-development

我在Java中使用GUI界面制作了一个简单的游戏。它是一个RPG游戏,在界面的某个地方它有一个进度条,它是生活栏,在它里面,它有其他的GUI项目,一个文本,这是角色的价值。生活。

起初它工作正常,但我在一个攻击按钮上添加了ActionerListener,它的作用是减少生命条和生命的价值(文本上的那些),如对游戏真正的攻击呢。但是,当我这样做时,我发生了一个错误。

有时生活栏会保留在生命价值的前面,有时它并不是,它就像是完全随意的。所以我的问题是:有没有办法在前面设置一个Gui项目?在那种情况下,生命的价值。

Obs:我有一个抽象类(CharactersInterface),我声明了所有的东西和兽人的敌人。

public class wizardInterface extends CharactersInterface{

//interface
public wizardInterface() {

//your name
you = new JLabel(wizard.name);
you.setBounds(85, 20, 160, 30);
panel.add(you);

//hit points
yhitpoints = new JLabel(wizard.hp + "/25");
yhitpoints.setBounds(95, 51, 50, 15);
panel.add(yhitpoints);

//life bar
ylife.setValue(wizard.hp*4);
ylife.setBounds(50, 50, 125, 18);
ylife.setForeground(Color.GREEN);
panel.add(ylife);

//your image
image1 = new ImageIcon(getClass().getResource("wizard.png"));
img1 = new JLabel(image1);
img1.setBounds(50, 80, 128, 128);
panel.add(img1);

//text
text = new JTextArea("Choose your spell!");
text.setFont(new Font("Serif", Font.PLAIN, 16));
text.setBackground(null);
text.setBounds(185, 300, 160, 45);
panel.add(text);

//thunder button
Icon thunder = new ImageIcon(getClass().getResource("thunder.png"));
attack1 = new JButton("Thunder", thunder);
attack1.setBounds(20, 350, 230, 140);
panel.add(attack1);

//fire button
Icon fire = new ImageIcon(getClass().getResource("fire.png"));
attack2 = new JButton("Fire", fire);
attack2.setBounds(280, 350, 230, 140);
panel.add(attack2);

//background image
backgroundImage = new ImageIcon(getClass().getResource("background1.png"));
background = new JLabel(backgroundImage);
background.setBounds(0, -20, 535, 300);
panel.add(background);

//do something when press the button
thehandler handler = new thehandler();
attack1.addActionListener(handler);
attack2.addActionListener(handler);

}

private class thehandler implements ActionListener{

     public void actionPerformed(ActionEvent event) {
        if(event.getSource()==attack1){
            orc.hp -=  1 + dice.nextInt(10) +  wizard.intelligence; // 1d10 +2;

        }else if(event.getSource()==attack2){
            orc.hp -= 3 + dice.nextInt(8) + wizard.intelligence; // 1d8 +4
        }

        //here is where I reduce the life of the enemy
        elife.setValue(orc.hp*2);
        ehitpoints.setText(orc.hp + "/50");

        if(orc.hp <=0){
            System.out.println("you won");
            System.exit(0);
        }

        //orc attacks
        wizard.hp -= 1 + dice.nextInt(4) + orc.strong; //1d4 + 2 

        ylife.setValue(wizard.hp*4);
        yhitpoints.setText(wizard.hp + "/25");

        if(wizard.hp <=0){
            System.out.println("you lose");
            System.exit(0);
        }
    }
} 

1 个答案:

答案 0 :(得分:0)

  

起初它工作正常,但我在一个攻击按钮上添加了一个ActionerListener,它的作用是减少生命条和生命值(在文本上),这是对游戏的真正攻击。 / p>

每当你减少角色的健康状况或增加角色的健康时,尝试将焦点转移到你想要在前面的对象... ex: -

bar.requestFocus();