编辑:不要介意我说的一切!!!
我刚刚意识到根本不需要使用循环。设置 GUI 的每个方法都在完成后立即结束,然后整个程序“等待”我按下按钮。我只需要设置方法,因此如有必要,它们可以“循环”。
我不确定我的解释是否正确,但我认为它会起作用。无论如何感谢您的帮助!
再问一个问题,为了安全起见:当我在“main()”方法中设置主窗口时,程序只有在达到我设置的某个条件时才会退出(即玩家死亡),并且不会自行“结束”吗?
好的,这是我的问题:
我正在开发一个非常原始的 RPG,它使用 Swing 作为它的 GUI。因为这意味着我需要大量的方法来让它工作,并且我需要用少量的按钮来控制一切(为了简单起见),我决定只使用一组按钮,并创建几个不同的 ActionListener . 当调用某个方法时,它通过将必要数量的按钮设置为“可见”、设置它们的文本并为它们分配正确的 ActionListener 来设置 GUI。
这是一个示例(玩家与 NPC 战斗):
public int Combat(NPC e){
game.setButtons(0, true, "Attack", 1);
game.setButtons(1, true, "Ability", 1);
game.setButtons(2, false, "", 1);
game.setButtons(3, false, "", 1);
game.setButtons(4, false, "", 1);
game.setButtons(5, true, "Flee", 5);
while(e.gethp() > 0 && this.hp > 0){
if (!game.getProceed())
break;
}
if (e.gethp() <= 0)
return 1;
else if(hp <= 0)
return 2;
else return 3;
}
(“设置按钮”:)
public void setButtons(int b, boolean v, String s, int act){
button[b].setVisible(v);
button[b].setText(s);
switch(act){
case 1: button[b].addActionListener(comlist[b]); break;
case 2: button[b].addActionListener(maplist[b]); break;
case 3: button[b].addActionListener(loclist[b]); break;
case 4: button[b].addActionListener(invlist[b]); break;
case 5: button[b].addActionListener(mainlist[b]); break;
case 6: button[b].addActionListener(playlist[b]); break;
case 7: button[b].addActionListener(intlist[b]); break;
case 8: button[b].addActionListener(proc); break;
}
}
(“战斗监听器”:)
class CombatListener implements ActionListener{
int but_num;
public CombatListener(int n){
but_num = n;
}
@Override
public void actionPerformed(ActionEvent arg0) {
player.CombatAction(but_num);
}
}
(我设置的另一个监听器是“Proceed”监听器。这会将游戏中的布尔“proceed”变量设置为 false。这里的想法是这将是我的“返回”按钮,这将允许我从菜单到前一个,或者在这种情况下:逃离战斗。这就是我在那个while循环中设置它的原因,但我不确定这是正确的方法。)
我不确定我应该为此提供多少代码才能有意义(整个事情非常庞大)。如有必要,我会在这里发布所有内容。
我的问题:我如何确保当我的程序进入“Combat”方法时,当我使用按钮发出命令时它能够停留在那里?这里的复杂之处在于,这些按钮通常会使程序进入一个额外的方法,这也可以以不同的方式设置 GUI,当这些方法完成时,需要“重置”GUI 才能使用以前的方法。
我希望所有这些都是有道理的...... :)