在目前的开发中,我们发现精灵表的使用效率非常低。尤其是我们的飞船(Jet)精灵,尽管它几乎是对称的,但我们仍在完整地存储其两侧的精灵数据,这造成了空间浪费。
解决方案:镜像精灵
-
精灵表重组:
- 首先,我创建了一个新的精灵表,将不必要的测试精灵移除,为优化后的精灵腾出空间。
- 然后,我将飞船精灵复制到新表中,并开始进行微调。
-
去除冗余空间:
- 我注意到飞船精灵的底部有两行完全是黑色的,这是不必要的空间浪费。通过微调精灵的像素位置,我移除了这些黑色行。
-
添加轮廓:
- 为了提高飞船在森林等深色背景中的可读性,我决定为飞船添加浅蓝色轮廓。虽然可以通过代码绘制轮廓,但考虑到CPU效率,我选择直接修改精灵图,将轮廓添加到精灵中。
-
精灵打包:
- 通过让飞船精灵的轮廓部分重叠,我进一步节省了精灵表空间。这样,两个几乎相同的精灵(一个向左倾斜,一个向右倾斜)可以共享轮廓数据。
-
SSPR函数应用:
- 我引入了SSPR函数来绘制飞船精灵。SSPR函数比SPR函数更强大,但也需要更多的参数。为了简化调用,我创建了一个名为
mySPR
的数组,用于存储每个精灵的绘制参数。 - 通过
mySPR
数组,我可以轻松地通过单个索引值绘制精灵,而无需每次都输入大量的参数。function mspr(si,sx,sy) local ms=myspr[si] sspr(ms[1],ms[2],ms[3],ms[4],sx-ms[5],sy-ms[6],ms[3],ms[4],ms[7]==1) end
- 我引入了SSPR函数来绘制飞船精灵。SSPR函数比SPR函数更强大,但也需要更多的参数。为了简化调用,我创建了一个名为
-
精灵中心偏移:
我注意到,之前精灵的中心点总是默认在左上角,这在视觉上并不直观。因此,我在mySPR
数组中添加了偏移量参数,允许我们更灵活地定位精灵的中心点。 -
镜像精灵实现:
为了进一步节省空间,我设计了一个系统,允许我们仅存储精灵的一半数据,并通过镜像功能绘制另一半。我在mySPR
数组中添加了一个标志位,用于指示精灵是否需要被镜像绘制。