Saya akan mengusulkan agar Anda mencoba TexturePacker
- Anda cukup menarik dan melepas semua gambar Anda dan mengemasnya
- Anda dapat menerapkan kompresi yang berbeda - mis. gunakan PNG yang diindeks yang menggunakan memori jauh lebih sedikit - hingga 70% lebih sedikit dibandingkan dengan file PNG standar
- Anda dapat membuat file data file yang berisi nama + posisi masing-masing bangunan Anda
- versi gratis mungkin sudah cukup untuk membuat lembar sprite untuk Anda
Apakah Anda menggunakan kerangka pengembangan game seperti AndEngine, Cocos2d-x atau LibGdx? => Tidak Ada
Apakah Anda perlu semua gambar Anda dimuat pada saat yang sama? Sepertinya Anda akan mengalami masalah RAM yang sangat besar pada perangkat target.
Pembaruan: Snake mengirimi saya beberapa gambar. Seperti yang dijanjikan tidak akan membuat mereka publik di sini jadi saya telah membuat beberapa karya seni sendiri untuk menunjukkan cara mengurangi penggunaan memori.
Di gambar asli, hanya satu bagian dari gambar yang bergerak. Saya telah menempatkan seekor burung di sebuah rumah untuk menunjukkan hal ini:
Pada dasarnya mengemas animasi lengkap menjadi selembar adalah pemborosan besar memori. Anda harus membagi bagian statis dan bergerak:
Statis:
Anim01:
Anim02:
Jaga posisi asli burung dalam gambar . Inilah sebabnya ada begitu banyak ruang kosong di atas. Anda memerlukan ini untuk menyelaraskan animasi.
Sekarang seret gambar pada TexturePacker dan pilih parameter berikut
- Format data: hash JSON (atau XML jika Anda menginginkannya)
- TrimMode: Trim (ini menciptakan persegi panjang)
- Format piksel: INDEXED 8bit - untuk membuat PNG 8bit (memori sekitar 70% lebih sedikit)
- Izinkan Rotasi: salah
- Masukkan nama file untuk data
Hasilnya adalah Anda sekarang mendapatkan 2 file: Lembar sprite dan file deskripsi 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}
},
Bagian penting adalah frame dan spriteSourceSize .
The bingkai memberikan Anda lokasi sprite asli dalam lembar sprite.
spriteSourceSize memberi Anda offset untuk menggambar gambar - bagian gambar yang ditinggalkan karena pemangkasan:
Rutin menggambar kode semu sederhana terlihat seperti ini:
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)
}
Anda mungkin harus menyesuaikan perhitungan offset tergantung pada pivot point / origin di sistem grafis Anda. Rutin di atas mengasumsikan sistem koordinat yang asalnya berada di kiri atas.
Maka cukup gambar rumah dalam 2 pass:
draw("background", 100, 100);
draw("anim_01", 100, 100);
Anda tidak perlu peduli dengan offset - karena gambar sudah disejajarkan.