如何在C#XNA中创建Wait()方法?

时间:2012-04-23 11:17:32

标签: c# xna boolean wait

我试图在我的游戏中添加“吸引”模式,为此我需要告诉角色在移动之前等待(所以我可以在屏幕上显示文字)。我决定使用Wait方法,我可以发送以下参数。

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

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

但是我不知道怎么做才能让gameTime只在第一次调用Wait时存储(或者bool永远不会标记为true)。我以为我可以制作内部bool来处理标记,但我不确定如何以动态/可重用的方式编写它?

非常感谢任何帮助,对于这篇文章感到抱歉! < 3

3 个答案:

答案 0 :(得分: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()

中检查它

答案 1 :(得分:0)

您可以创建一个计时器类。你会做什么的 定时器t =新定时器(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停止计时器运行。

因此,无论何时计时器运行,都不会发生移动

答案 2 :(得分:-2)

看一下Thread.Sleep,MSDN