
272
|
第
9
章
if distanceToTarget < nearestNodeDistance {
nearestNode = otherCritter
nearestNodeDistance = distanceToTarget
}
}
}
self.target = nearestNode
讨论
首先,这个问题不会有固定的答案,解决方法是多种多样的,因为这完全取决于你
怎么去定义“最佳”这个词。在游戏中,我们应该如何定义最佳目标?它有可能是:
•
距离最近的。
•
威胁最大的。
•
最弱的。
•
分值最高的。
此外,还取决于我们所能获取的有关目标的信息。对众多潜在目标进行一番细致研
究虽然要花费一定的时间,但却是值得的。最后,你还可以对需要遍历的次数进行
一定的优化。
9.7
转向问题
问题
我们想让一个对象转到个一点,同时保持速度不变。
解决方案
要让对象转向,需要计算出正面方向和目标方向之间的夹角。然后将这个角度调整
到最大转向速度内:
//
计算从当前位置到目标的向量
let toTarget = target - self.position