私はテキストアドベンチャーゲームを作っていて、自分の好きな方法で自分のテキスト表示を得ることができない問題に遭遇しました。いくつかの言葉を入力すると、プレイヤーは新しい部屋の導入を開始することができます。私はこの紹介に「タイプライター」効果を持たせたいと思っています。このイベントは私のプログラムのActionPerformedメソッドで発生する必要があります。たとえば、ユーザーが「移動」してからEnterキーを押すと、結果のテキストが一度に1文字ずつ印刷されます。私はそれが私のスレッドを妨げないように、同様の方法は、Timerクラスを使用することで動作するように取得できますかタイマーを使用してJTextAreaでタイプライターエフェクトを実現するには?
public void slowPrint(String message, long millisPerChar)
{
//makes it so that the player cannot input while the text is being displayed
userinput.setEditable(false);
String o;
for (int i = 0; i < message.length(); i++)
{
//adds each letter one-by-one
o = "" + message.charAt(i);
output.append(o);
//moves the JTextArea to the bottom
output.setCaretPosition (output.getDocument().getLength());
//delay so that you can see each letter being added
try {
Thread.sleep(millisPerChar);;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace(); }
}
//after the text is displayed allow the user to input again
userinput.setEditable(true);
}
:ここ
は、私はこの効果を達成するためのactionPerformedの外で使う現在の方法であり、 GUIの更新から
これは私のアクションは、関連するメソッドを持つようなルックスを行っです:
public void actionPerformed(ActionEvent e)
{
s = userinput.getText();
output.append("\n");
userinput.setText("");
for (int i = 0; i<whatRoom.length; i++)
{
if (whatRoom[i])
{
switch(i)
{
case 0:
controlOne(s);
break;
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
}
}
}
}
そして「controlOne()」メソッド:
private void controlOne(String s)
{
if(one.getHasLight() == true)
{
if(!one.getPushYes())
{
output.append(one.dealWithLight(s, output));
}
else output.append(one.commands(s));
}
else output.append(one.commands(s));
}
の代わりに私が使用したいすべての時間を追加私の "slowPrint"メソッドに似たものです。
うまくいけば、これはいくらか意味があり、助けがあれば大いに感謝するだろう。 Timer
の