【发布时间】:2014-09-27 23:54:51
【问题描述】:
我正在开发一个 2.5D 游戏引擎,其中角色可以以任意角度移动,但需要以最接近他们实际移动角度的预先绘制的“旋转”加载动画。他们的实际动作可能会以某种方式作弊。 由于它们随机改变方向,这意味着每次它们旋转时,我们都需要搜索一个向量,其中“旋转”——精灵表——可用。
当我旋转整个相机时,这会成为一个大问题,因为我们需要将所需的旋转与每个角色、房屋等的 4、8、12 或 16 个可用旋转进行比较,屏幕上最多 256 个时间。最繁重的代码是获取每个已知旋转和请求的旋转之间的差异。也就是说,如果 AI 请求 346º 的旋转,我们会迭代让我们假设这个角色旋转 12 次,然后看到他们有一个 330º 的预绘制图纸和一个 0º 的图纸。阻塞的代码是一个非常简单的函数,可以查看这两个角度中的哪一个更接近 346º。这听起来很傻,但确实如此——因为我必须在 12 个预先绘制的旋转中的每一个、256 个字符中的每一个、每一帧上运行它。
目前,对于每个已知的旋转,我都会将其与请求的旋转(角色运动的方向)进行检查,并查看哪个比较最接近。这是我用来获得差异的功能,我正在寻找一种让它更快的方法,因为由于某种原因它是一个巨大的猪,完全不成比例。显然 abs 和 min 很慢。我知道我可以使用辅助变量,但这似乎并不是减慢它的原因。我们可以假设通过的度数已经在 0-360 的范围内,但我们无法猜测它们的顺序:
public static function AngleDifference(a:Number,b:Number):Number {
var dif:Number = Math.abs(a-b);
return (Math.min(dif,360-dif));
}
我想知道以某种方式包装它是否会更快,四舍五入到预设的哈希表,甚至是某种疯狂的位数学。它基本上是排序功能的一部分...
【问题讨论】:
标签: actionscript-3 modulo