Bagaimana cara kerja animasi interaksi karakter / objek dalam permainan isometrik?

10

Saya merencanakan permainan simulasi bisnis isometrik di mana pemain melihat kantor dengan furnitur biasa seperti meja, papan tulis, dll.

Karakter (Staf / NPC) dalam permainan harus berinteraksi dengan objek-objek ini dengan melakukan beberapa tugas yang telah ditentukan seperti mengetik pada keyboard di meja atau menulis di papan tulis dll.

Yang saya minati, khususnya, adalah skenario berikut:

Karakter bergerak melintasi kantor (1) ke mejanya (2) dan duduk dan mulai mengetik (3).

Dari apa yang saya mengerti saya akan memiliki sprite sheet untuk gerakan karakter (1) dan sprite statis untuk meja (2) tapi saya tidak mengerti bagaimana langkah ketiga akan ditangani?

Apakah ada sprite gabungan yang berisi meja dan karakter? Saya berasumsi tidak, kalau tidak saya perlu memiliki lembar sprite untuk setiap kombinasi meja dan karakter.

Bagaimana ini biasanya ditangani?

EDIT:

Berikut adalah contoh spesifik animasi dari game Theme Hospital. Anda dapat melihat videonya di sini .

Sejauh yang saya bisa lihat animasi dibagi menjadi beberapa langkah.

Langkah 1 - Karakter bergerak antara meja dan kursi.

masukkan deskripsi gambar di sini

Ini menunjukkan bahwa kursi dan meja sebenarnya adalah sprite terpisah.

Langkah 2 - Karakter duduk animasi

masukkan deskripsi gambar di sini

Perhatikan bagaimana pada frame terakhir kursi lebih dekat ke meja.

Langkah 3 - Animasi meja

masukkan deskripsi gambar di sini

Langkah 4 - Berdiri animasi

Sama seperti duduk tetapi diputar terbalik.

Langkah 5 - Pindah

Gunakan animasi gerakan normal untuk menjauh.

Pertanyaan saya adalah bagaimana animasi-animasi ini dipisahkan dengan baik dan bagaimana biasanya seorang seniman grafis menyediakan animasi-animasi ini?

Apakah karakter yang duduk dan mengetik di meja sebenarnya tiga sprite yang berbeda (meja, karakter dan kursi)? Adakah yang tahu contoh sprite animasi serupa?

EDIT 2:

Saya kira kekhawatiran terbesar saya adalah bahwa saya memiliki harapan yang tepat tentang bagaimana sebenarnya sprite akan terlihat. Saya tidak bisa menggambar mereka sendiri sehingga saya harus membayar seseorang untuk melakukannya dan saya berasumsi ada semacam cara praktik terbaik untuk melakukan animasi semacam ini?

Patrick Klug
sumber

Jawaban:

8

Jawaban singkat? Jangan gabungkan sprite.
Artinya, jika Anda menggabungkan, Anda harus memiliki animasi untuk setiap kombinasi tunggal. Tampak aneh jika Anda hanya menginginkan satu kursi. Tapi mari berpura-pura kantor Anda dapat diperluas di tengah permainan, di mana kursi sekarang memiliki sprite lebih bagus. Apakah Anda hanya menambahkan sprite kursi, atau Anda akan menggabungkan kembali dan menambahkan semua animasi setiap majikan lagi?

Mari kita buat beberapa kalori.

Berpura-puralah Anda memiliki 6 sprite pada majikan yang sedang mengetik animasi, Anda memiliki 5 kursi yang berbeda, dan 10 jenis majikan yang berbeda.

Jika Anda hanya menggambar majikan di atas kursi, ini akan membutuhkan 10 * 6 + 5 sprite, 65 sprite.
Jika Anda menggabungkan, dan membuat setiap kombinasi, ini membutuhkan 10 * 6 * 5 sprite, yaitu 300 sprite. Akan sangat merepotkan bagimu untuk membuat spritesheet sebesar ini hanya untuk animasi sederhana!

EDIT:

Nah, jika Anda tidak tahu caranya, akan lebih baik untuk mendefinisikan kursi Anda sebagai latar belakang, dan staf sebagai sprite aktif. Lebih mudah untukmu.

Background.draw();
Foreach(employer i in staff)
    I.draw();

Itu harus menjaga staf Anda terpisah dari chais Anda (latar belakang) Juga, perbarui frame animasi staf juga.

EDIT2:

Saya melihat hasil edit dan sampel Anda. Saya akan tetap menggunakan pendekatan yang sama. Semua sprite berbeda. Kursi tetap akan berada di depan karakter!

Untuk memindahkan kursi lebih dekat, perbarui posisinya ke beberapa piksel ke atas dan ke kiri, atau lakukan ini pada sprite itu sendiri.

Apakah Anda mengerti tentang Z align? yang seharusnya memainkan banyak hal ...

Anda dapat melihat bahwa beberapa bagian kursi tetap berada di belakang karakter, yang lain muncul di depan. Jadi bagaimana ini mungkin jika hanya satu sprite? Selaras z!

Dua cara untuk mencapai efeknya. Simpan topeng (Tidak semudah itu) atau bagi sprite Anda menjadi dua.

Saya hanya akan menyebutkan metode kedua, karena saya tidak punya banyak waktu sekarang. Anda harus memotong sprite kursi Anda, di bagian yang akan berada di depan, dan apa yang akan ada di belakang. Lalu letakkan mereka di posisi yang sama. mudah! Yang dimainkan adalah Z Align di sini, Bagian belakang harus ditarik di belakang, karakter di bagian tengah dan bagian kursi depan di bagian depan.

Saya tidak tahu lib / api / sdk / toolset yang Anda gunakan. Tetapi yang paling melakukan cara ini: gunakan az Align factor yang menentukan apa yang ada di belakang atau apa yang ada di depan atau Apa yang imbang pertama pergi di belakang, apa yang imbang terakhir pergi di depan. Jadi, Anda harus mengingat ini.

Gustavo Maciel
sumber
ya terima kasih. Saya juga berpikir begitu tetapi saya tidak mengerti bagaimana animasi akan tercapai saat itu. Anda tahu contoh yang bisa saya lihat? itu yang terbaik!
Patrick Klug
Apakah maksud Anda kode atau permainan? Jika Anda menginginkan game, cobalah untuk melihat Game Dev Story oleh Kairosoft untuk Android dan iOS. Contoh kode saya tidak tahu ...
Gustavo Maciel
Jawaban direvisi. Lihat apakah itu sesuai dengan kebutuhan Anda (:
Gustavo Maciel
Saya telah memperbarui pertanyaan saya dengan contoh spesifik. Saya benar-benar tertarik dengan bagaimana sprite akan terlihat atau apa yang digunakan oleh seniman grafis. Animasi GameDev Story agak terlalu sederhana untuk apa yang ada dalam pikiran saya.
Patrick Klug
Baca Edit 2, saya telah meningkatkan jawabannya, semoga memenuhi kebutuhan Anda.
Gustavo Maciel
2

Gagasan alternatif adalah memasukkan gambar Buffer Kedalaman / Z dengan sprite Anda yang mirip dengan bagaimana API 3D (OpenGL) memastikan poligon tidak tumpang tindih. Untuk gim sprite dasar, gim ini hanya berupa sekumpulan 0/1 bit (bitmap hitam dan putih) (walaupun Anda bisa menggunakan lebih banyak level kedalaman jika mau).

Jika Anda memiliki sprite gabungan 'kursi meja' dan ingin kursi tersebut muncul di depan sprite lain (yaitu orang-orang) di alun-alun itu, Anda akan membuat versi Z-Buffer dari char 'hitam' sementara desknya akan 'putih' .

Ketika Anda membuat sprite dinamis (seseorang) pada ubin itu, ia akan memeriksa untuk melihat warna apa yang ada di buffer kedalaman. Untuk piksel yang 0 (hitam) Anda lewati menggambar orang sprite piksel dan hanya meninggalkan kursi di sana.

Daripada memeriksa setiap piksel 1 pada satu waktu, cara yang lebih sederhana untuk melakukan pemeriksaan adalah mengalikan piksel sprite dengan nilai buffer kedalaman karena kedalaman yang lebih dekat adalah 0 dan membatalkan. Maka tentu saja Anda harus colorkey (kecuali jika Anda memiliki saluran warna alpha).

Ini tentu saja menambah overhead (walaupun Anda bisa melewatkannya untuk apa pun yang tidak perlu beberapa tingkat kedalaman seperti kursi meja). Anda juga perlu menyinkronkan animasi Anda (yaitu orang tersebut harus cocok dengan anim kursi meja). Itu tidak memberi Anda fleksibilitas yang sama hanya dengan memiliki sejumlah sprite terpisah.

David C. Bishop
sumber
Lapisan kedalaman dengan topeng yang saya sebutkan di edit saya (:
Gustavo Maciel