3

我正在尝试在我的游戏中添加“吸引”模式,为此我需要告诉角色在移动之前等待(这样我就可以在屏幕上显示文本)。我决定创建一个可以发送以下参数的 Wait 方法是合适的。

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

该代码将存储它被调用的时间,以毫秒为单位等待指定的时间,然后在时间过去后返回 true。

但是我不知道如何做到这一点,以便 gameTime 仅在第一次调用 Wait 时存储(或者 bool 永远不会标记为真)。我以为我可以制作内部布尔值来处理标记,但我不确定如何以动态/可重用的方式对其进行编程?

非常感谢任何帮助,并对这篇文章感到抱歉!<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秒攻击一次。如果你只想攻击一个,你可以添加 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,然后当它为真时停止计时器运行。

因此,每当计时器运行时,都不会发生运动

于 2012-04-23T12:17:14.057 回答
-2

看看 Thread.Sleep,MSDN

于 2012-04-23T12:20:16.640 回答