我正在创建“完美”的精灵打包程序。这是一个精灵打包程序,可确保输出精灵与大多数(即使不是全部)游戏引擎和动画软件兼容。这是一个将图像合并为水平Sprite表的程序。
-
它将源帧(如果需要)转换为内存中的BMP
-
它认为左上像素对整个图像完全透明(可以配置)
-
它分别解析每个帧以找到实际坐标rect(实际帧的开始,结束,其宽度和高度(有时图像可能会有很多额外的透明像素)。
-
它确定框架框,该框架框的宽度和高度具有最大的宽度/高度,以至于足以容纳每个框架。 (为获得额外的兼容性,每个框架必须具有相同的尺寸)。
-
创建宽度为nFrames * wFrameBox
的输出精灵
问题是-锚定对齐。当前,它尝试对齐每个框架,以使其中心位于框架框的中心。
if((wBox / 2) > (frame->realCoordinates.w / 2))
{
xpos = xBoxOffset + ((wBox / 2) - (frame->realCoordinates.w / 2));
}
else
{
xpos = xBoxOffset + ((frame->realCoordinates.w / 2) - (wBox / 2));
}
设置动画后,看上去效果更好,但是仍然存在不一致的水平框架位置,因此,行走动画看上去就像在走路和摇晃。
我还尝试了以下方法:
存储最宽帧的真实x像素位置,并将其用作参考点:
xpos = xBoxOffset + (frame->realCoordinates.x - xRef);
它还给出了更好的结果,表明这仍然不是正确的算法。
老实说,我不知道我在做什么。
如果输出的精灵表的宽度等于帧数乘以最宽的帧的宽度,那么对齐精灵帧的正确方法是什么(获得适当的x位置绘制下一个帧)?