3

ゲームに「引き付ける」モードを追加しようとしています。そのためには、移動する前にキャラクターに待機するように指示する必要があります (画面にテキストを表示できるようにするため)。次のパラメーターを送信できる Wait メソッドを作成するのが適切であると判断しました。

    public bool Wait(int waitTime, GameTime gameTime)
    {
        // Wait Code
    }

このコードは、呼び出された時間を保存し、指定された時間 (ミリ秒単位) 待機し、時間が経過すると true を返します。

ただし、Wait が初めて呼び出されたときにのみ gameTime が格納されるようにする方法がわかりません (または bool が true にフラグを立てることはありません)。フラグ付けを処理するために内部ブールを作成できると思いましたが、これを動的/再利用可能な方法でどのようにプログラムするかわかりませんか?

どんな助けでも大歓迎です。エッセイには申し訳ありません!<3

4

3 に答える 3

2

同様の問題を解決しました。スニペットは次のとおりです。

private static readonly TimeSpan intervalBetweenAttack1 = TimeSpan.FromMilliseconds(3000); 
private TimeSpan lastTimeAttack;

および更新可能なオブジェクトの Update() 内

public override void Update(GameTime gameTime)
{
      // If enough time has passed attack
      if (lastTimeAttack + intervalBetweenAttack < gameTime.TotalGameTime)
      {
           Attack();
           lastTimeAttack = gameTime.TotalGameTime;
      }
}

AIの簡易コードです。3秒ごとに攻撃します。1 つだけを攻撃したい場合は、bool hasAttacked = false; を追加できます。そして、単に Update() でチェックするだけです

于 2012-04-23T11:34:19.733 に答える
0

タイマー クラスを作成できます。Timer t = new Timer(3000f); のようなことをする場所 // タイマーの実行時間を表す値を受け取ります

トリガー:

t.Start();

更新方法:

if(!t.IsActive)
{
    //Player updates here
}
else
    t.Update(gameTime);

待機方法:

public void Wait()
{
    if(t.IsActive)//set by the .start method
    {
        if(t.isComplete)
        {
             //do some stuff
             t.Stop();
        }
        else
        {
            //we're still timing, nothing to do here
        }
    }
}

これは非常に大まかで、記憶によって書かれているため、役立つかどうかは完全にはわかりません.

したがって、タイマー クラス内では、更新中にインクリメントされ、追跡フロート (currentTime += gameTime.elapsedgametime.milliseconds のようなもの) が格納されている合計時間よりも大きい場合は、タイマーを IsComplete = true としてマークし、これが true のときに停止します。タイマー実行中。

したがって、タイマーが実行されているときはいつでも、動きは発生しません

于 2012-04-23T12:17:14.057 に答える
-2

MSDNの Thread.Sleep を参照してください。

于 2012-04-23T12:20:16.640 に答える