Apa cara terbaik untuk membuat animasi ketika melakukan pengembangan Android?

10

Saya mencoba membuat game Android pertama saya dan saat ini saya mencoba mencari tahu (dengan seseorang yang akan melakukan gambar dan programmer lain) apa cara terbaik untuk membuat animasi. (Animasi seperti pemindahan karakter, dll.)

Pada awalnya, perancang mengatakan bahwa dia bisa menggambar objek / karakter dan menghidupkannya dengan flash sehingga dia tidak harus menggambar setiap bingkai aksi. Programmer lain dan saya tidak tahu Flash terlalu banyak jadi saya menyarankan mengekstraksi semua gambar dari animasi Flash dan membuatnya muncul satu demi satu ketika animasi akan dimulai.

Dia mengatakan bahwa pada akhirnya akan mengambil terlalu banyak sumber daya pada CPU dan saya cenderung setuju, tapi saya tidak benar-benar melihat bagaimana kita seharusnya membuat animasi yang lancar tanpa terlalu keras pada perangkat keras dan, jika mungkin, tidak memiliki perancang menggambar setiap frame pada Adobe Illustrator.

Dapatkah pengembang game Android yang berpengalaman membantu saya menyeimbangkan ini sehingga kita dapat beralih ke bagian lain dari game karena saya tidak tahu apa cara terbaik untuk membuat animasi.

Adam Smith
sumber

Jawaban:

12

Jika Anda mempertimbangkan animasi 2D, render satu sprite dan yang lain tidak akan menjadi masalah untuk perangkat (kecuali sprite Anda besar).

Di bawah ini adalah animasi sprite khas yang pertama saya temukan dengan sedikit pencarian. Ini adalah teknik yang umum digunakan dan ada banyak situs web yang menawarkan spritesheets gratis (dan sebaliknya, selalu periksa lisensi).

Sumber gambar: [di sini] (http://gaminggroundzero.com/?page_id=31)

Sumber gambar + penulis: di sini

Hijau diatur sebagai warna transparan gambar sehingga Anda tidak memiliki area warna yang tidak diinginkan. Anda perlu mengetahui koordinat masing-masing animasi dalam urutan animasi di spritesheet untuk memainkannya.

Untuk Android, kita dapat melihat mesin game open source oleh Chris Pruett (sebelumnya dari Google) yang disebut Pulau Replika . Kode sumber tersedia, dan kita dapat melihat nya SpriteAnimation.java dan SpriteComponent.java .

A SpriteAnimationhanya dibuat dengan jumlah bingkai dan ID unik dan setiap aktor dalam game dapat memiliki banyak animasi. The SpriteAnimationdapat diberikan sejumlah AnimationFrames, masing-masing dengan durasi dalam milidetik. Ini berarti bahwa animasi yang berbeda dapat ditukar keluar tergantung pada apakah karakter bergerak atau menyerang dll (lihat di AnimationComponent.playAnimation(int id)).

Setiap iterasi dari loop permainan, yang AnimationFrame's getFrame(float time)disebut, dan cek berapa banyak waktu telah berlalu sejak terakhir iterasi loop utama dan memutuskan mana frame untuk bermain berikutnya, kemudian kembali frame untuk mendapatkan dikirim ke sistem rendering. Ini memungkinkannya untuk melewatkan bingkai animasi jika animasi berjalan terlalu lambat.

Saya harap contoh ini berfungsi, dan Anda dapat melihatnya digunakan di gim sebenarnya di Android Marketplace di sini .

Martin Foot
sumber
Terima kasih banyak atas jawaban yang dijelaskan dengan baik dan terperinci! Saya akan melihat bagaimana saya bisa mengadaptasi ini ke game saya. Ini sangat membantu!
Adam Smith
@AdamSmith: Menggunakan sprite-sheet seperti itu adalah cara terbaik untuk animasi 2D. Tidak masalah jika artis Anda membuat animasi dalam sekejap atau program lain, selama ia dapat mengekspor animasi ke gambar yang kemudian dapat Anda masukkan ke dalam sprite-sheet
bummzack
@bummzack Itulah jawaban yang saya harapkan, terima kasih!
Adam Smith
@ AdamSmith harus dicatat juga (untuk menghindari kebingungan) bahwa Pulau Replika tidak benar-benar menggunakan sprite sheet, ia menggunakan file tunggal. Diskusi mengapa spritesheets bermanfaat dapat ditemukan di sini dan (dengan lebih detail) di sini .
Martin Foot
@ Martin Foot, Anda telah memberikan penjelasan yang sangat bagus. Tapi saya masih bingung, saya punya 10-15 jenis animasi dan saya punya Frames masing-masing dengan ukuran 320x480 yang bisa dibilang animasi layar penuh. Jadi, apa yang Anda sarankan untuk saya dapatkan dari SpriteSheet atau file sumber animasi tunggal? Saya terlalu bingung harus menggunakan apa. Mohon saran saya cara terbaik .. Terima kasih banyak ....
Scorpion