2

一定時間後にアクションをトリガーしたいのですが、これを行う方法をグーグルで調べましたが、運がありませんでした。それは私のゲームのコーディング方法だと思います。とにかく、コード a1 がトリガーされてから 30 分後に、コード a2 がトリガーされる場所に到達する必要があります。

a1:

if (itemId == 608) {
        c.sendMessage("The scroll has brought you to the Revenants.");
        c.sendMessage("They are very ghastly, powerful, undead creatures.");
        c.sendMessage("If you defeat them, you may receive astounding treasures.");
        c.sendMessage("If you donate you may visit the Revenants anytime without a scroll.");
        c.getPA().movePlayer(3668, 3497, 0);
        c.gfx0(398);
        c.getItems().deleteItem(608, 1);
}

a2:

c.getPA().movePlayer(x, y, 0);
4

3 に答える 3

2

Java でタイマーを実行する方法はたくさんありますが、優れたフレームワークを紹介するには、 http: //quartz-scheduler.org/を参照してください。また、使用する場合、Springにはクォーツ統合があります。

しかし、もっと重要なことは、ゲームを作成する場合、イベント ループと呼ばれるゲーム プログラミングのコア テクニックが必要になることです。

これは、ゲーム アーキテクチャの作成方法に関する適切な議論のようです。

于 2012-08-07T01:48:54.723 に答える
1

Thread.sleep() を使用できますが、メイン スレッドで呼び出すとアプリケーションがフリーズするため、別のスレッドを作成してコードをそこに入れます。これを行うと、メイン アプリケーションは停止しません。

簡単な例を次に示します。

public class MyThread implements Runnable {

    @Override
    public void run() {

        try {

            System.out.println( "executing first part..." );
            System.out.println( "Going to sleep ...zzzZZZ" );

            // will sleep for at least 5 seconds (5000 miliseconds)
            // 30 minutes are 1,800,000 miliseconds
            Thread.sleep( 5000L );

            System.out.println( "Waking up!" );
            System.out.println( "executing second part..." );

        } catch ( InterruptedException exc ) {
            exc.printStackTrace();
        }

    }

    public static void main( String[] args ) {
        new Thread( new MyThread() ).start();
    }

}

これは 1 回だけ実行されます。複数回実行するには、run メソッド本体を囲む無限ループ (またはフラグによって制御されるループ) が必要です。

次のような他のオプションがあります。

于 2012-08-07T01:53:13.143 に答える
1

このコードはProject Insanityを使用しているため、 が提供する組み込みのスケジュールされたイベント機能を使用する必要がありますserver.event.EventManager

以下はコード例です。

if (itemId == 608) {
  c.sendMessage("The scroll has brought you to the Revenants.");
  c.sendMessage("They are very ghastly, powerful, undead creatures.");
  c.sendMessage("If you defeat them, you may receive astounding treasures.");
  c.sendMessage("If you donate you may visit the Revenants anytime without a scroll.");
  c.getPA().movePlayer(3668, 3497, 0);
  c.gfx0(398);
  c.getItems().deleteItem(608, 1);

  /* only if the parameter Client c isn't declared final */
  final Client client = c;
  /* set these to the location you'd like to teleport to */
  final int x = ...;
  final int y = ...;

  EventManager.getSingleton().addEvent(new Event() {

    public void execute(final EventContainer container) {
      client.getPA().movePlayer(x, y, 0);
    }
  }, 1800000); /* 30 min * 60 s/min * 1000 ms/s = 1800000 ms */
}
于 2012-08-07T02:07:50.343 に答える