TexturePackerを試すことを提案します
- すべての画像をドラッグアンドドロップして、それらをパックすることができます
- 異なる圧縮を適用することができます-例えば、より少ないメモリを消費するインデックス付きPNGを使用-標準のPNGファイルと比較して最大70%削減
- 各建物の名前と位置を含むファイルデータファイルを作成できます。
- 無料版は既にスプライトシートを作成するのに十分かもしれません
AndEngine、Cocos2d-x、LibGdxなどのゲーム開発フレームワークを使用していますか?=>なし
すべての画像を同時に読み込む必要がありますか?ターゲットデバイスで大規模なRAMの問題が発生するようです。
更新:Snakeから画像が送られてきました。約束されたようにここでは公開しませんので、メモリ使用量を削減する方法を示すために自分でアートを作成しました。
元の画像では、画像の一部のみが動いていました。これを実証するために家に鳥を置いた。
基本的に、アニメーション全体をシートにパックすることは、メモリの大きな浪費です。静的部分と可動部分を分割する必要があります。
静的:
Anim01:
Anim02:
画像内の鳥の元の位置を保持します。これが、上記のように空のスペースがある理由です。これは、アニメーションの位置合わせに必要です。
TexturePackerで画像をドラッグし、次のパラメーターを選択します
- データ形式:JSONハッシュ(または必要に応じてXML)
- TrimMode:トリム(これにより四角形が作成されます)
- ピクセル形式:8ビットのINDEXED-8ビットのPNGを作成する(約70%少ないメモリ)
- 回転を許可:false
- データのファイル名を入力してください
結果として、スプライトシートとJSON記述ファイルの2つのファイルが得られます。
"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です。
フレームは、あなたのスプライトシートの元のスプライトの位置を示します。
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)
}
グラフィックシステムのピボットポイント/原点に応じて、オフセット計算を調整する必要がある場合があります。上記のルーチンは、原点が左上にある座標系を想定しています。
その後、単純に2つのパスで家を描きます。
draw("background", 100, 100);
draw("anim_01", 100, 100);
画像はすでに整列されているため、オフセットを気にする必要はありません。