Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Game Development
  2. 2D Games
Gamedevelopment

Mekanik Platformer: Memindahkan Platform

by
Difficulty:BeginnerLength:MediumLanguages:

Malay (Melayu) translation by Adjatay Bashroh Aldad (you can also view the original English article)

Final product image
What You'll Be Creating

Dalam tutorial ini, anda akan belajar bagaimana membuat platform bergerak dan pastikan objek yang menunggangnya akan mengekalkan kedudukan relatif mereka. Kami juga akan mengendalikan kes yang dihancurkan di antara platform dan tanah.

Prasyarat

Tutorial ini berdasarkan kepada siri Fizik Asas Platformer. Khususnya, kami akan menggunakan kod berdasarkan bahagian ke 8 tutorial sebagai titik permulaan, dengan beberapa pengubahsuaian. Lihat siri tutorial, dan terutamanya bahagian terakhir. Prinsip-prinsip di sebalik pelaksanaannya akan berdiri walaupun anda menggunakan penyelesaian fizik yang berbeza, tetapi kod tersebut akan serasi dengan versi yang dibentangkan dalam siri tutorial.

Demo

Anda boleh memuat turun demo dari lampiran tutorial. Gunakan kekunci WASD untuk menggerakkan watak, Space untuk menanam watak klon, dan P untuk menanam platform bergerak. Tombol tetikus kanan membuat jubin. Anda boleh menggunakan roda skrol atau kekunci anak panah untuk memilih jubin yang anda mahu letakkan. Slider menukar saiz watak pemain.

Demo telah diterbitkan di bawah Perpaduan 2017.2b4, dan kod sumber juga serasi dengan versi Perpaduan ini.

Pelaksanaan

Memindahkan Platform

Pertama sekali, mari buat skrip untuk platform bergerak.

Inisialisasi

Mari kita mulakan dengan membuat kelas objek.

Sekarang mari kita mulakan beberapa parameter asas objek dalam fungsi init.

Kami menetapkan saiz dan kelajuan, dan kami membuat kinematik collider, yang bermaksud bahawa ia tidak akan digerakkan oleh objek biasa. Kami juga menetapkan mSlopeWallHeight kepada 0, yang bermaksud bahawa platform tidak akan memanjat lereng-ia akan selalu melayan mereka sebagai dinding.

Kelakuan

Tingkah laku untuk platform bergerak ini hanya akan berlaku: mula bergerak dengan betul, dan apabila anda menemui halangan, tukar arah 90 darjah mengikut arah jam.

Inilah corak yang digambarkan:

The pattern visualized

Melekatkan Watak ke Platform

Sekarang, jika wataknya berdiri di atas platform, platform itu hanya akan meluncur dari bawahnya, seolah-olah tidak ada geseran antara objek. Kami akan cuba membetulkannya, dengan menyalin offset platform.

The offset of the platform

Tentukan Objektif Ibu Bapa

Pertama sekali, kita ingin mengetahui apa objek, jika ada, adalah watak kita berdiri. Mari kita menyatakan rujukan kepada objek tersebut dalam kelas MovingObject.

Sekarang, dalam UpdatePhysicsResponse, jika kami mengesan bahawa kami bertabrakan dengan objek di bawah kami, kami dapat memberikan rujukan ini. Mari buat fungsi yang akan memberikan rujukan dahulu.

Kini mari kita gunakannya di tempat yang sesuai, di mana sahaja kita mengatakan bahawa objek kita bertembung dengan objek lain di bawahnya.

Tempat pertama adalah apabila kita menyemak sama ada objek menyentuh.

Tempat kedua adalah ketika mereka bertindih.

Sekarang bahawa kita telah mendapat liputan ini, mari kita mengendalikan gerakan untuk objek kita. Mari ubah suai fungsi UpdatePhysics dari tutorial terdahulu.

Mari kita mengisytiharkan pemboleh ubah kelas untuk mengimbangi bahawa kita perlu memindahkan watak kita.

Kini mari kita menggantikan tempatan yang lama dengan kelas satu.

Sekiranya objek berada di platform, mari tambahkan pergerakan platform untuk mengimbangi.

Perhatikan bahawa kami juga menyemak di sini jika kami masih berhubung dengan objek tersebut. Sekiranya itu tidak berlaku maka kami menetapkan mMountParent ke null, untuk menandakan bahawa objek ini tidak lagi menunggang yang lain.

Seterusnya, mari kita alihkan kedudukan objek kita dengan mengimbangi itu. Kami tidak akan menggunakan fungsi Pindah kami, tetapi hanya menukar kedudukan. Oleh itu, dalam pemeriksaan perlanggaran antara objek yang berlaku selepas UpdatePhysics, kami akan mendapat hasil untuk kedudukan dalam bingkai ini dan bukannya sebelumnya.

Sekarang mari pindahkan ke UpdatePhysicsP2, yang dipanggil selepas perlanggaran antara objek telah diselesaikan. Di sini kita membatalkan pergerakan sebelumnya, yang belum diperiksa sama ada ia sah atau tidak.

Seterusnya, kami teruskan ke UpdatePhysicsResponse untuk memohon langkah keluar dari tumpang tindih dengan objek lain. Di sini, sebelum ini kita mengubah kedudukan secara langsung, tetapi sekarang mari kita ubah suai mOffset, jadi perubahan kedudukan ini akan diselesaikan kemudian apabila kita menggunakan fungsi Pindah kami.

Sekarang kita boleh kembali ke UpdatePhysicsP2, di mana kita hanya memanggil fungsi UpdatePhysicsResponse dan Pindah seperti yang kita lakukan sebelum ini, untuk mendapatkan kedudukan kedudukan yang betul.

Betulkan Perintah Kemaskini

Kerana cara kita memerintahkan kemas kini fizik, jika objek kanak-kanak dikemaskini sebelum ibu bapa, kanak-kanak itu akan sentiasa kehilangan hubungan dengan platform apabila bepergian ke atas/bawah.

Traveling up or down

Untuk membetulkannya, setiap kali kami menetapkan mMountParent, jika platform berada di belakang kanak-kanak dalam barisan kemas kini, kami menukar kedua-dua, jadi objek ibu bapa selalu dikemas kini terlebih dahulu. Mari lakukan pengubahsuaian itu dalam fungsi TryAutoMount.

Seperti yang anda dapat lihat, jika id kemas kini objek platform lebih besar daripada kanak-kanak, pesanan kemas kini objek akan ditukar, menghapus masalah.

The order of the objects

Itulah yang paling penting apabila ia merapatkan watak ke platform bergerak.

Mengesan Menjadi Hancur

Mengesan hancur cukup mudah. Dalam UpdatePhysicsResponse, kita perlu melihat sama ada bertindih terhadap objek kinematik bergerak ke dinding.

Mari kita menjaga paksi X terlebih dahulu:

Jika objek berada di sebelah kanan kami dan kami telah menolak ke dinding kiri, maka mari memanggil fungsi Crush, yang akan kami laksanakan kemudian. Lakukan perkara yang sama untuk pihak yang lain.

Mari kita ulangi bahawa untuk paksi Y.

Fungsi Crush hanya akan memindahkan watak ke tengah peta untuk demo.

Hasilnya adalah watak yang ditelefon ketika ia dihancurkan oleh platform.

Being crushed by a platform

Mengakhiri

Ini adalah tutorial ringkas kerana menambahkan platform bergerak bukan satu cabaran besar, terutama jika anda mengetahui sistem fizik dengan baik. Meminjam dari semua kod dalam siri tutorial fizik, ia sebenarnya merupakan proses yang sangat lancar.

Tutorial ini telah diminta beberapa kali, jadi saya harap anda merasa berguna! Terima kasih kerana membaca, dan berjumpa dengan anda pada masa akan datang!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.