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

本文关键字:Wait 方法 创建 XNA | 更新日期: 2023-09-27 18:31:56

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

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

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

但是,我不确定如何使游戏时间仅在第一次调用 Wait 时存储(或者布尔值永远不会标记为 true)。我以为我可以制作内部布尔值来处理标记,但我不确定如何以动态/可重用的方式对其进行编程?

非常感谢任何帮助,并对论文感到抱歉! <3

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

我已经解决了类似的问题。这是代码片段:

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 秒攻击一次。如果你只想攻击一个,你可以添加布尔哈斯攻击=假;然后只需在 Update() 中检查它

您可以创建一个计时器类。你会在哪里做类似的事情定时器 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
        }
    }
}

这是非常粗糙的,由记忆编写,所以不完全确定是否会帮助你。

因此,在计时器类中,它在更新期间递增,如果跟踪浮点数(例如当前时间 += gameTime.elapsedgametime.毫秒)大于存储的总时间,则将计时器标记为 IsComplete = true,然后当这是真的时停止计时器运行。

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

看看 Thread.Sleep, MSDN