Apakah animasi Minecraft di-hardcode ke dalam gim? [Tutup]


12

Saya ingin tahu bagaimana sistem animasi bekerja di minecraft. Saya merasa bahwa semua monster dikodekan ke dalam permainan. Apakah takik benar-benar duduk di sana dan membuat matriks untuk semua tulang animasi dengan tangan?

Saya suka menciptakan game untuk bersenang-senang, jadi saya ingin tahu bagaimana dia melakukan ini. Juga, jika dia benar-benar melakukan hardcode pada mereka ... adakah cara yang lebih baik?


2
mengapa menurut Anda dia memiliki animasi hardcoded?
Ali1S232

Sepertinya pertanyaan ini hanya dapat dijawab oleh Notch.
MichaelHouse

9
Lebih penting lagi, mengapa Anda peduli bagaimana Minecraft melakukannya? Apakah Anda punya ide tentang cara mencapai hal yang sama dengan cara lain?
Tetrad

1
minecraftforum.net/topic/361430-181smp-smart-moving Pembuat mod ini mungkin memiliki jawaban untuk Anda, tetapi animasi bukanlah area kode minecraft yang telah saya lihat sebelumnya.
James

1
Saya telah melihat melalui kode MCP sebelumnya, dan saya 99% yakin saya ingat melihat animasi hard-coded. Saya tidak lagi memiliki minecraft (atau bahkan Eclipse) untuk diperiksa.
BlueRaja - Danny Pflughoeft

Jawaban:


18

Seperti yang orang lain katakan, ya model serta animasinya sulit dikodekan. Jika Anda ingin melihat bagaimana ini dilakukan, buka wiki Paket Coder Minecraft .

Paket itu dibuat untuk membantu pembuat mod mendekompilasi, mengubah, dan mengkompilasi ulang kelas Minecraft. Instruksi termasuk dalam file readme yang datang dengan paket. Paket berisi skrip untuk mendekompilasi, mengkompilasi ulang, dan menghidupkan kembali gim dan server.

Kelas-kelas yang ingin Anda lihat adalah: ModelBase, ModelBiped, dan ModelRenderer.

ModelBiped berisi fungsi-fungsi berikut yang melakukan animasi humanoid:

public void render(Entity entity, float time, float f1, ...)
{
    setRotationAngles(time, f1, ...);
    ...
}

public void setRotationAngles(float time, float f1, ...)
{
    ...
    bipedRightArm.rotateAngleX = MathHelper.cos(time * 0.6662F + 3.141593F) * 2.0F * f1 * 0.5F;
    bipedLeftArm.rotateAngleX = MathHelper.cos(time * 0.6662F) * 2.0F * f1 * 0.5F;
    ...
}

Ayunan lengan hanyalah fungsi kosinus. Lengan kanan diimbangi oleh PI untuk membuat mereka berayun ke arah yang berlawanan.

grafik ayunan lengan

Saya harap itu menjawab pertanyaan Anda =)


Jika Anda ingin informasi lebih lanjut tentang bagaimana sebenarnya mod Minecraft, maka lihat pertanyaan ini:

Bagaimana cara menambahkan mob khusus ke Minecraft?


Kak! Rotasi Euclidean :(.
Jonathan Dickinson

8

Model-model di Minecraft adalah kode-keras. Tidak ada gagasan tentang hierarki blok (hanya daftar blok). Ini berarti bahwa animasi dilakukan secara prosedural (dengan cara yang sangat mendasar) atau nilai-nilai hard-coded dengan interpolasi.

Ada beberapa editor untuk model Minecraft seperti Techne atau FMCModeler yang memungkinkan mengimpor / mengekspor kode model Minecraft untuk mod, tetapi mereka tidak mendukung animasi karena mungkin ditangani secara berbeda untuk setiap model.

Berikut ini contoh cepat yang dihasilkan dengan FMCModeler:

//variables init:
public ModelRenderer box;

//constructor:
box = new ModelRenderer(0, 0);
box.addBox(0F, 0F, 0F, 16, 16, 16);

//render:
box.render(f5);

Cara yang lebih baik untuk melakukannya adalah membangun pemodel berbasis blok penuh dengan beberapa konsep hierarki blok sehingga Anda dapat menghidupkan model dengan keyframe dan interpolasi.

Saat ini saya sedang membangun alat pembuat game multipemain yang melakukan hal itu (antara lain, http://craftstud.io/ ). Ini sudah memungkinkan membangun model bertekstur statis yang rumit dan banyak lagi yang akan datang.

Berikut model rumit yang dibangun dengan CraftStudio Seperti yang Anda lihat, blok disusun dalam pohon di sebelah kanan: http://i.stack.imgur.com/FRQeV.png

Setiap blok diserialisasi ke disk / melalui jaringan dengan data berikut:

  • Identitas unik
  • ID simpul induk
  • Posisi (memengaruhi keturunan)
  • Skala (memengaruhi keturunan)
  • Angle (mempengaruhi keturunan)
  • Offset dari titik pivot
  • Ukuran blok
  • Offset tekstur blok (offset UV koordinat untuk tekstur)

Saya berencana menambahkan dukungan animasi dengan menyimpan peta dengan nama animasi sebagai kunci dan daftar kerangka kunci sebagai nilai. Setiap kerangka kunci akan dikaitkan dengan blok dan nilai untuk menghidupkan. Di antara kerangka kunci, nilai harus diinterpolasi (baik secara linear untuk posisi atau untuk sudut, cari lerp dan slerp).


0

Model blok Minecraft sebenarnya tidak dimasukkan dalam hardcod ke dalam game pada 1.8 dan dapat diedit menggunakan paket sumber daya. Sistem pemodelan JSON cukup mudah dimengerti dan model ada di / models / block. Anda kemudian dapat melihat kode untuk melihat bagaimana itu menginterpretasikan model JSON.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.