編集:私が言ったことすべてを気にしないでください!!!
ループをまったく使用する必要がないことに気付きました。GUI をセットアップする各メソッドは、それが完了するとすぐに終了し、その後プログラム全体がボタンを押すのを「待機」します。メソッドを設定するだけで、必要に応じて「ループ」できるようになります。
正しく説明できているかどうかわかりませんが、うまくいくと思います。とにかく助けてくれてありがとう!
安全のために、もう 1 つ質問があります。「main()」メソッドでメイン ウィンドウをセットアップすると、プログラムは、セットアップした特定の条件 (つまり、プレイヤーが死ぬ) に達した場合にのみ終了します。それ自体で「終了」しませんか?
さて、ここに私の問題があります:
GUI として Swing を使用する非常に原始的な RPG に取り組んでいます。これは、それを機能させるために大量のメソッドが必要であり、(物事を単純にするために) 少数のボタンですべてを制御する必要があることを意味するため、一定数のボタンのみを使用し、いくつかの異なる ActionListeners を作成することにしました。 . 特定のメソッドが呼び出されると、必要な数のボタンを「表示」に設定し、それらのテキストを設定し、適切な ActionListeners をそれらに割り当てることにより、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;
}
}
(「CombatListener」:)
class CombatListener implements ActionListener{
int but_num;
public CombatListener(int n){
but_num = n;
}
@Override
public void actionPerformed(ActionEvent arg0) {
player.CombatAction(but_num);
}
}
(私が設定したもう 1 つのリスナーは、"Proceed" リスナーです。これにより、ゲーム内のブール値の "proceed" 変数が false に設定されます。メニューを前のものに戻す、またはこの場合: 戦闘から逃げる. これが、その while ループに設定した理由ですが、これが正しい方法であるかどうかはわかりません.)
これが意味をなすためにどれだけのコードを提供する必要があるのか わかりません(全体が信じられないほど巨大です)。必要に応じて、すべてここに投稿します。
私の質問: プログラムが「戦闘」メソッドに入ったときに、ボタンを使用してコマンドを実行している間、そこにとどまることができるようにするにはどうすればよいですか? ここでの複雑な点は、これらのボタンがしばしばプログラムに追加のメソッドを入力させ、別の方法で GUI をセットアップする可能性があることです。これらのメソッドが完了したら、GUI を「リセット」して前のメソッドで動作させる必要があります。
私はそれがすべて理にかなっていることを願っています... :)