我正在拍摄一张精灵表并将其拆分成一个数组。然后,我接受该阵列并以一定的粒度旋转图像并将其推到阵列的末端,以便预先烘焙旋转以便更快地绘制(无硬件加速)。最终结果如下所示:
array[0] = frame1 of the animation
array[1] = frame2 of the animation
array[2] = frame3 of the animation
array[3] = frame1 of the animation rotated at 45 degrees
array[4] = frame2 of the animation rotated at 45 degrees
array[5] = frame3 of the animation rotated at 45 degrees
array[6] = frame1 of the animation rotated at 90 degrees
... etc
所以现在我正在尝试提出一个函数,它将以正确的粒度返回任意角度的正确元素。例如,假设我的游戏内对象当前旋转了30度且位于动画的第1帧,我想要数组[3]。如果我在动画的第2帧,我会想要数组[4]。如果对象旋转了80度并且在frame1上,我会想要数组[6],依此类推。
这些是我的常量: 动画帧数#(预旋转) 动画帧数#(后旋转) 旋转的粒度(从1到360,即45的粒度将是上面的例子)。
这是计算框架的函数的签名:
function calculateImageIndex(animationFrame : Number, currentAngle : Number) : Number
有关如何计算的任何想法?我很难过。
答案 0 :(得分:3)
nf: total number of frames
gr: granularity of rotation
r: actual angle of rotation
f: actual frame number
i = round(r / gr) * nf + f - 1
答案 1 :(得分:0)
n =帧数(预旋转) g =旋转粒度 r =实际旋转角度 f =实际帧
我认为这些是你需要和给出的常数。
我们要做的第一件事就是找到达到所需角度所需的旋转次数。在上面的例子中,角度为45°将是1次旋转。 90度= 2转,依此类推。设R =转数。
R = r / g这应该是一个整数,因为你永远不需要一个不适合你所用的小费的角度。
接下来,我们将计算该旋转“组”的起始索引。在上面的示例中,旋转0的第一个组将从索引0开始.45度或1个旋转将从索引3开始。依此类推。为此,我们需要将旋转次数(R)乘以旋转前的帧数(n)。设j =该旋转组的起始索引。 j = R * n
最后一步是弄清楚你必须添加多少到起始索引(j)以达到你想要的帧。我将假设第一帧将编号为1,如上例所示,但如果第一帧编号为0,则删除算法中的-1。设i =最终指数。 i = j +(f - 1)
我将成为您正在寻找的索引。将它们放在一个算法中就可以看起来像这样。
i =((r / g)* n)+(f - 1)
希望这有帮助!如果您需要我澄清任何内容,请告诉我。