Saya mengembangkan game seperti Age of empire (bangunan di peta) dan untuk setiap bangunan saya memiliki sprite sheet untuk animasinya. Saya menggunakan animasi frame by frame untuk menghidupkan bangunan (tidak mengetahui adanya metode lain). Saya memperhatikan bahwa folder sumber daya saya menjadi sangat besar karena gambar yang saya masukkan ke dalamnya.
Bagaimana game seperti CoC dan Age of Empires menjaga ukuran apk mereka di bawah 50 Mg? Apakah saya kehilangan sesuatu di sini dalam hal pengembangan game
Terima kasih
Sunting: Info lebih lanjut untuk masalah yang saya hadapi
Saya punya BANYAK animasi objek yang dapat digambar. Saya memilih cara ini karena itu yang tercepat dan menghasilkan hasil yang saya inginkan. Pada dasarnya setiap bangunan adalah gambar animasi yang mana file xmlnya mengacu pada 8 gambar (8 gambar = 8 file). Semuanya PNG karena transparansi. Karena saya memiliki lebih dari 200 gambar, ukuran apk adalah 120 MB (Dan saya belum selesai menyalin setengah dari file). Itulah yang cepat, harus ada cara untuk menyelesaikannya. Tolong bantu sesama pengembang
Jawaban:
Tidak jelas dengan pertanyaan Anda jika Anda benar-benar ingin tahu teknik yang memungkinkan game menghemat ruang disk bahkan ketika memiliki file gambar / sumber daya berat dalam jumlah besar (itulah yang ada di tubuh pertanyaan), atau jika Anda hanya ingin tahu apakah ada lebih sedikit ruang disk yang lapar untuk melakukan animasi untuk bangunan Anda (itulah yang tersirat pada judul pertanyaan Anda).
Jadi, saya akan meletakkan jawaban ini di sini mencoba membantu dalam hal menghemat ruang saat Anda memiliki banyak gambar. Jika Anda hanya tertarik untuk mengetahui tentang teknik animasi yang memungkinkan Anda menghemat ruang disk, beri tahu saya maka saya mungkin menghapus jawabannya.
Yang mengatakan, dalam situasi yang sama, dua solusi yang saya lihat (dan digunakan sekali) dalam hal menghemat ruang di disk, adalah:
1) untuk menggabungkan masing-masing gambar dalam satu gambar yang sama. Terkadang ini bisa membantu. Jadi alih-alih menyimpan 4 file terpisah untuk masing-masing kotak berwarna berikut, saya menyimpan semuanya berdampingan dalam gambar yang sama (dan hanya akan membaginya melalui kode permainan):
Dalam contoh ini, menyimpan masing-masing dalam 4 file PNG yang berbeda berjumlah 1255 byte, sedangkan file tunggal dengan semua digabungkan adalah 451 byte. Tentu saja, seberapa banyak itu dapat membantu tergantung pada kasus per kasus dan Anda harus menguji untuk melihat apakah itu dapat membantu Anda tergantung pada gambar Anda.
2) untuk mengompresi folder sumber daya. Ini sering kali bisa sangat membantu untuk menghemat ruang disk. Kemudian ketika gim ini berjalan, Anda bisa mendekompres atau menarik gambar yang diinginkan dari file yang dikompresi - tergantung pada format kompresi yang Anda gunakan. Lihat jawaban sebelumnya yang menjadi wiki situs ini: /gamedev//a/37649/72423
Tetapi juga perlu diingat bahwa setiap jenis kompresi mungkin lebih atau kurang menguntungkan tergantung pada jenis file gambar yang Anda gunakan : Hindari kompresi sumber daya ganda
Untuk detail lebih lanjut tentang kompresi: Keadaan canggih dalam kompresi gambar?
Terakhir, Anda mungkin juga tertarik untuk memikirkan jenis gambar apa yang akan digunakan untuk setiap situasi: Format gambar mana yang lebih hemat memori: PNG, JPEG, atau GIF?
sumber
Saya akan mengusulkan agar Anda mencoba TexturePacker
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
Hasilnya adalah Anda sekarang mendapatkan 2 file: Lembar sprite dan file deskripsi JSON.
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:
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:
Anda tidak perlu peduli dengan offset - karena gambar sudah disejajarkan.
sumber
Berikut adalah beberapa penunjuk yang dapat Anda gunakan
Saya harap petunjuk ini membantu
PS Saya hanya memberikan ide umum karena saya tidak mengetahui konten permainan Anda yang sebenarnya dan meminta maaf jika petunjuk ini tidak berguna
sumber
Banyak game yang tidak menyimpan aset grafisnya di .apk; mereka hanya memasukkan "dasar-dasar" seperti grafik UI dan kode game dan mengunduh sisa aset setelah game dipasang. Hal ini terutama berlaku untuk gim yang menggunakan sumber daya grafis yang berbeda tergantung pada resolusi tampilan Anda untuk menjaga .apk dari keharusan mengandung aset beresolusi rendah dan hi-res.
Anda harus melihat opsi pengoptimalan yang disediakan oleh penjawab lain, serta apakah Anda akan harus menyajikan grafik gim Anda secara terpisah dari .apk itu sendiri.
sumber
Saya datang ke situs ini untuk mencari pertanyaan serupa dan memang ada beberapa sumber yang bagus yang menunjuk pada jawaban untuk pertanyaan Anda dan dalam pertanyaan lain.
Anda mungkin harus melihat animasi 2D: Model atau sprite animasi 3D dengan bingkai animasi? untuk beberapa perdebatan tentang berbagai jenis animasi. Ini membantu saya mengoptimalkan permainan saya. Selain itu, Anda tidak memberi tahu kami API mana yang Anda gunakan atau Engine mana yang Anda gunakan. Itu saja dapat membuat perbedaan: Android frame by frame PNG animation
Selain itu, perlu diingat bahwa jika Anda akan pergi rute kompresi, mungkin ada perbedaan penting antara cara Anda kompres. Secara khusus, ada beberapa perbedaan antara jenis kompresi dan ada beberapa perdebatan khusus tentang rute mana yang paling tepat untuk perangkat seluler. Khususnya jika Anda mempertimbangkan bahwa untuk seluler, penggunaan RAM dan pemborosan CPU untuk memuat juga sangat penting. Lihat: http://www.gamasutra.com/blogs/AlexandruVoica/20130419/190833/Why_efficiency_is_key_in_texture_compression_standards_for_mobile_graphics.php?print=1
sumber