我建议您尝试TexturePacker
- 您只需拖放所有图像并将其打包
- 您可以应用不同的压缩方式-例如,使用索引PNG消耗更少的内存-与标准PNG文件相比,最多减少70%
- 您可以创建一个文件数据文件,其中包含每个建筑物的名称和位置
- 免费版本可能已经足够为您创建精灵表了
您是否使用AndEngine,Cocos2d-x或LibGdx之类的游戏开发框架?=>无
您是否需要同时加载所有图像?听起来您会在目标设备上遇到大量RAM问题。
更新:Snake给我发送了一些图像。正如承诺的那样,它们不会在这里公开,因此我自己创建了一些艺术作品来演示如何减少内存使用。
在原始图像中,只有一部分图像在移动。我在房子上放了一只鸟来证明这一点:
基本上将整个动画打包到一张纸中会浪费大量内存。您应该拆分静态和动态部分:
静态的:
Anim01:
Anim02:
保持鸟类在图像中的原始位置。这就是为什么上面如此空旷的空间。您需要此来对齐动画。
现在将图像拖到TexturePacker上并选择以下参数
- 数据格式:JSON哈希(如果需要,则为XML)
- TrimMode:Trim(创建矩形)
- 像素格式:INDEXED 8bit-创建8bit PNG(内存减少约70%)
- 允许旋转:假
- 输入数据的文件名
结果是您现在得到2个文件:Sprite表和JSON描述文件。
"house_anim_01.png":
{
"frame": {"x":351,"y":246,"w":110,"h":79},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":67,"y":8,"w":110,"h":79},
"sourceSize": {"w":400,"h":400},
"pivot": {"x":0.5,"y":0.5}
},
重要的部分是frame和spriteSourceSize。
该框架可让您在Sprite工作表中找到原始Sprite的位置。
spriteSourceSize为您提供绘制图像的偏移量-由于修整而遗漏的图像部分:
一个简单的伪代码绘制例程如下所示:
drawImage(spritename, posX, posX)
{
data = sheetData[spritename]
offsetX = data.spriteSourceSize.x
offsetY = data.spriteSourceSize.y
frameX = data.frame.x
frameY = data.frame.y
width = data.frame.w
height = data.frame.h
screen.draw(sheetImage, posX+offsetX, posY+offsetY, width, height)
}
您可能必须根据图形系统中的枢轴点/原点调整偏移量计算。上面的例程假设一个坐标系的原点位于左上方。
然后只需两步绘制房子:
draw("background", 100, 100);
draw("anim_01", 100, 100);
您不必担心偏移量-因为图像已经对齐。