C#数据类型gamedev初学者应该使用:队列

这是我计划介绍的一些数据类型的第一篇文章,这些数据类型确实是初学者游戏程序员未真正使用的数据类型,并且您可能会考虑在游戏代码中使用它们。 我们从哪里开始呢? 使用我最喜欢的数据类型Queue。

如果您有购买杂货的经验,您可能已经对Queue是什么有了一些猜测。 与商店队列类似,它是对象的先进先出(FIFO)集合。 换句话说,如果将字符串“ cat”,“ dog”和“ mouse”添加到队列中,则会以相同的顺序将它们取出。

那么,为什么要使用队列而不是仅使用数组或列表呢? 首先,队列(以及System.Collections.Generic中的大多数集合)可以随着新对象的添加而动态增长,而不是像数组那样固定不变。 而使用列表,从列表的开头删除内容并不是很有效,因此Queue在性能上击败了它们。 最后,键入.Enqueue()将对象添加到Queue中,.Dequeue()从Queue中删除对象,以及Peek()来查看下一个对象而不删除它,这是很好的。 它使工作变得更加轻松,并且您的代码更易于阅读。

因此,这是何时使用Queue的实际示例。 想象我们有一个小人物,我们想要移动到我们在屏幕上单击的每个位置。 首先,如果要使用Queue,则必须包含System.Collections.Generic命名空间,如此处顶部所示:

  使用System.Collections.Generic; 
使用UnityEngine;
  CommandRobot类:MonoBehaviour 
{
//这里我们初始化一个包含Vector3类型的队列
Queue positionTargets = new Queue ();
Vector3 mTarget;
  公共无效Update() 
{
//移动到当前目标位置
transform.position =
Vector3.MoveTowards(transform.position,mTarget,0.1f);
  //检查是否达到目标,并且 
//有一个后续目标
if(positionTargets.Count> 0 && transform.position == mTarget)
{
  //出队下一个目标,并分配 
//将其移至目标位置变量
mTarget = positionTargets.Dequeue();
}
  //这里我们在Mousedown上添加了一个新目标 
如果(Input.GetMouseButtonDown(0))
{
  //做一些事情以获得点击的世界排名 
Vector3 newPos =
Camera.main.ScreenToWorldPoint(Input.mousePosition);
  newPos.z = 0; 
  //添加新对象就像.Enqueue(thingToAdd)一样简单! 
positionTargets.Enqueue(newPos);
}
}
}

内森·约翰(Nathan John)是一名独立开发人员,目前在 WarpBall上 工作, 并开设了 Instant Game Coder 课程 (本文 最初发布 于此