我试图在我的游戏中添加“吸引”模式,为此我需要告诉角色在移动之前等待(所以我可以在屏幕上显示文字)。我决定使用Wait方法,我可以发送以下参数。
public bool Wait(int waitTime, GameTime gameTime)
{
// Wait Code
}
代码将存储它被调用的时间,等待指定的时间(以毫秒为单位),然后在时间过去时返回true。
但是我不知道怎么做才能让gameTime只在第一次调用Wait时存储(或者bool永远不会标记为true)。我以为我可以制作内部bool来处理标记,但我不确定如何以动态/可重用的方式编写它?
非常感谢任何帮助,对于这篇文章感到抱歉! < 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