Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Game Development
  2. Programming
Gamedevelopment

Ruang: Permainan Bekas Objek yang Berguna

by
Difficulty:IntermediateLength:LongLanguages:

Malay (Melayu) translation by Meyria (you can also view the original English article)

Seluruh titik ruang adalah untuk memegang objek permainan. Objek permainan dalam satu ruang tidak boleh mempunyai apa-apa cara untuk berkomunikasi dengan objek permainan dalam ruang lain, sehingga ruang menyediakan cara yang mudah untuk memisahkan kumpulan objek permainan yang berbeza. Dalam artikel ini, anda akan mempelajari manfaat seni bina sedemikian.

Jika anda ingin melihat contoh pelaksanaan ruang, sila lihat enjin permainan sumber terbuka SEL. Saya sendiri aktif mengarang SEL dan dengan bangga membentangkannya sebagai sumber berfungsi sepenuhnya untuk pembaca artikel ini.

Saya ingin mengucapkan terima kasih kepada Sean Middleditch kerana mengajar saya tentang manfaat Spaces.

Petua: Istilah ruang dalam konteks artikel ini merujuk kepada bekas permainan objek khas. Saya tidak menyedari istilah rasmi yang jelas. Jika anda tahu satu, sila buat komen!


Pengurusan Objek Konvensional

Dalam enjin permainan konvensional, objek permainan biasanya disimpan dalam satu bekas. Bekas sedemikian boleh menjadi penguntukan bersama pegangan pengurus. Kadang-kadang bekas hanyalah senarai yang dipautkan. Tidak peduli apa pelaksanaan sebenar, mungkin hanya satu bekas yang memegang semua objek permainan, dan setiap objek permainan dibuat selalu di dalam bekas ini.

Ini baik dan benar-benar berfungsi, tetapi ia mempunyai beberapa isu organisasi. Sebagai contoh, bayangkan pengurus keadaan permainan tradisional. Seringkali, antara peralihan dari satu negeri ke negara yang lain, semua objek permainan yang dimuatkan sekarang dibebaskan dan yang baru dibaca dari cakera. Sebagai pengoptimuman, objek permainan untuk keadaan seterusnya (atau peringkat) boleh dimuatkan pada benang yang berasingan sebelum waktu supaya peralihan keadaan segera.

Walau bagaimanapun, terdapat isu yang menjengkelkan yang biasanya timbul: bagaimana kita mewakili elemen GUI untuk menu? Mungkin pemain HUD dikodkan menggunakan objek permainan dan skrip yang dilampirkan pada objek permainan ini. Pelaksanaan pengurusan negeri yang naif akan memanggil semua elemen HUD untuk dimusnahkan dan dicipta semula apabila peralihan negeri. Ini bermakna kod tersuai akan diperlukan untuk mengendalikan peralihan objek tertentu dari satu negara yang lain.

Atau mungkin reka bentuk permainan memerlukan pemandangan latar belakang gila di mana beberapa pertempuran besar sedang berlaku-tetapi pertempuran ini tidak harus mengganggu latar depan (atau pemain) dalam apa-apa cara.

Seringkali, penyelesaian hacky yang pelik untuk perkara-perkara seperti ini timbul, seperti mewakili unsur-unsur HUD sebagai sangat jauh dari seluruh gameplay di dunia. Jeda menu dan sebagainya hanya dipindahkan ke pandangan apabila diperlukan, dan bergerak sebaliknya. Secara umum, kod tersuai diperlukan untuk mengurus dan menyusun objek permainan, kerana mereka semua tinggal di satu kilang atau bekas.


Kontena Objek Berbilang Permainan

Penyelesaian yang dapat diterima untuk masalah ini adalah untuk menggunakan ruang (lihat penerangan video tambahan oleh rakan sekerja saya Sean Middleditch). Oleh kerana semua objek permainan dalam setiap ruang mempunyai interaksi sifar, ruang menjadi cara semula jadi untuk mendekati organisasi objek permainan. Ini dapat meminimumkan keperluan kod khusus untuk mengekalkan bekas logik yang berasingan dalam bekas sebenar (seperti yang disebutkan dalam bahagian sebelumnya).

Mari kita lihat dengan cepat contoh pelaksanaan ruang angkasa seperti dalam bahasa yang sama dengan C:

Ia sering berguna untuk dapat mencari ruang dengan nama. Ini sangat bagus untuk skrip di mana skrip boleh menggunakan kod seperti:

Diagram showing the simple organization of game objects into isolated containers.
Diagram menunjukkan organisasi mudah objek permainan ke dalam bekas terpencil. Tidak semua ruang mempunyai jumlah objek permainan yang sama, atau bahkan objek permainan yang sama.

Apakah objek yang masuk ke ruang?

Jawapan untuk soalan ini ialah: kesemuanya! Sebarang jenis objek permainan akan dimasukkan ke dalam ruang. Jika anda biasa dengan pengagregatan (atau reka bentuk berasaskan komponen) maka objek permainan dan komponen yang berkaitan akan semua berada dalam ruang yang sama.

Idea ini adalah untuk mewujudkan ciri seni bina untuk membolehkan cara yang mudah dan berkesan untuk mengumpulkan objek permainan bersama-sama dan mengasingkannya dari kumpulan lain.

Terminologi

Ruang agak sama dengan beberapa konsep lain yang telah terapung untuk seketika sekarang. Telah dikatakan bahawa ruang adalah serupa dengan senarai paparan dalam Flash. Jika anda biasa dengan portal untuk membuat pemusnahan (terutama penting dalam permainan 3D dengan banyak bilik dalaman), idea ini agak serupa di sini juga.

Walau bagaimanapun, terdapat perbezaan yang penting untuk dibuat di sini. Ruang bukanlah satu bentuk pembahagian ruang seperti yang dilakukan dengan portal atau partition spacial lain (seperti pokok BSP yang popular) untuk menyebabkan oklusi. Ruang adalah ciri seni bina untuk membolehkan pengasingan objek permainan umum.

Secara peribadi, saya suka memikirkan ruang seperti lapisan Photoshop: semua lapisan boleh dilihat (atau didengar) serentak, tetapi apabila melukis pada lapisan, tiada lapisan lain yang terjejas secara langsung; setiap lapisan adalah unik dan terpencil.

Sistem dan Ruang

Konsep sistem, untuk tujuan artikel ini, dapat digambarkan sebagai satu set fungsi (fungsi atau metode) yang beroperasi pada objek permainan ruang. Dengan cara ini, ruang diserahkan kepada sistem untuk melakukan beberapa tindakan; sistem tertentu adalah global kepada keseluruhan permainan.

Diagram exemplifying the simplicity of allowing a system to operate upon a space as input.
Rajah menggambarkan kesederhanaan membenarkan sistem beroperasi pada ruang sebagai input.

Bayangkan sistem grafik yang mengandungi kekosongan Grafik :: fungsi DrawWorld (Space space). Fungsi DrawWorld ini akan melengkung ke atas objek dalam ruang yang diberikan dan boleh dilukis pada skrin.

Idea ini adalah untuk menulis kod (sistem) yang beroperasi pada input objek permainan yang diberikan. Tiada penjejakan khas atau pengurusan objek permainan yang perlu berlaku dalam sistem sedemikian. Sistem tidak boleh melakukan apa-apa kecuali menjalankan operasi pada objek permainan.

Gaya ini memberikan anda beberapa manfaat yang sangat bagus, seperti yang terperinci dalam bahagian seterusnya.


Faedah Ruang

Manfaat yang paling mendesak untuk melaksanakan ruang dalam enjin ialah pengendalian unsur atau menu GUI menjadi remeh. Kita boleh membina ruang yang didedikasikan untuk menu tertentu dan, apabila menu ini tidak aktif, sistem semata-mata tidak perlu beroperasi pada kandungan ruang. Apabila menu tidak aktif, ia berada dalam memori (objek permainan yang terdiri daripada memori yang duduk dalam ruang menu) dan tidak melakukan apa-apa; ia tidak dikemas kini oleh sistem logik atau diberikan oleh sistem grafik.

Apabila menu ini menjadi aktif lagi, ia dapat diserahkan kepada sistem yang sesuai. Menu kemudiannya boleh dikemas kini dan diberikan dengan sewajarnya. Pada masa yang sama, permainan yang berjalan di belakang menu boleh dihentikan untuk dikemas kini dalam apa cara sekalipun, walaupun mungkin masih diteruskan ke sistem grafik yang akan diberikan. Ini secara tidak langsung melaksanakan fungsi jeda-dan-resume yang elegan dan mantap yang hanya datang secara tersirat kerana ruang cara ditakrifkan.

Tahap terisolasi

Seringkali, dalam permainan gaya RPG seperti Pokémon, pemain akan masuk dan meninggalkan rumah dan pondok. Sehubungan dengan permainan, rumah-rumah yang berbeza ini biasanya sepenuhnya terpencil; Rumah kecil atau gua adalah senario yang ideal untuk memohon ruang. Ruang keseluruhan boleh dibina untuk memasukkan objek permainan rumah tertentu, dan ini boleh dimuatkan dan dimulakan dalam memori dan berehat sehingga diperlukan. Peralihan segera boleh dicapai dengan hanya menukar ruang yang diberikan kepada pelbagai sistem enjin.

Idea yang keren untuk permainan 2D seperti platformer (atau permainan 3D) dapat mensimulasikan tahap sebenar dan musuh dari permainan di latar belakang. Ini mungkin membawa kehidupan dunia dengan cara yang tidak memerlukan sebarang kandungan tambahan, dan tidak ada masa perkembangan tambahan. Contoh terbaik yang saya dapati ialah Rayman Legends:


Musuh sebenar, sama seperti pemain biasa melihat, boleh melompat atau merangkak di dinding di kejauhan. Peralihan di antara lapisan ''berbeza'' ini boleh memberikan beberapa kemungkinan reka bentuk yang sangat menarik.

Kemungkinan semacam ini agak jarang berlaku untuk mencari contoh-contoh dan idea ruang tidak benar-benar dipenuhi oleh studio atau enjin AAA moden. Walau bagaimanapun, reka bentuknya pepejal dan manfaatnya adalah nyata.

Multiplayer Tempatan

Dalam banyak permainan dengan sokongan multiplayer di mana kedua pemain bermain dengan klien permainan yang sama, terdapat beberapa batasan. Selalunya pemain tidak boleh pergi ke kawasan baru tanpa kedekatan antara satu sama lain. Kadang-kadang pemain tidak boleh meninggalkan skrin masing-masing. Ini mungkin disebabkan oleh reka bentuk permainan, tetapi saya mempunyai kecurigaan bahawa ia sering disebabkan oleh keterbatasan seni bina.

Dengan ruang, kita dapat menyokong dua pemain, mungkin dengan skrin berpecah, perjalanan dari satu peringkat atau bangunan ke yang lain. Setiap pemain boleh tinggal di ruang yang sama, atau dalam dua ruang berasingan. Apabila setiap pemain berada dalam bangunan yang berbeza, kedua-duanya boleh berada dalam dua ruang berasingan. Satu yang mereka kumpulkan ke kawasan yang sama, enjin boleh memindahkan salah satu objek permainan pemain ke ruang lawan.

Sokongan Editor

Ini pastinya contoh kegemaran saya bagaimana ruang hebat. Dalam editor terdapat seringkali bahagian di mana anda boleh membangun objek jenis baru. Objek ini dalam penciptaan biasanya akan mempunyai viewport untuk mempratonton penciptaan itu sebagai kemajuan pembangunan bersama.

Tidak mustahil kebanyakan enjin secara semulajadi menyokong editor seperti itu. Bagaimana jika pengguna mengubah kedudukan dan tiba-tiba bertembung dengan simulasi dan mengetuk perkara, atau mengaktifkan beberapa AI? Kod tersuai mesti diwujudkan untuk memanipulasi objek dalam ingatan entah bagaimana. Sama ada kod pengasingan kes khas, atau beberapa format perantara, mesti diedit dan diterjemahkan dari editor kepada simulasi sebenar. Langkah-langkah perantaraan mungkin merupakan suatu bentuk pengisaran, atau objek proksi dummy yang tidak mengganggu kompleks. Objek proksi seringkali memerlukan introspeksi kod maju untuk dilaksanakan dengan cara yang berguna. Pilihan ini boleh mahal atau tidak perlu untuk banyak projek.

Walau bagaimanapun, jika seseorang mempunyai ruang pada pelupusannya, objek kamera dan objek dalam penciptaan boleh dimasukkan ke dalam ruang terpencil. Ruang ini kemudiannya boleh diserahkan kepada sistem apa saja yang diperlukan dan dikendalikan secara berasingan. Tiada kod kes khas atau pengarang tambahan yang diperlukan dalam senario sedemikian.

Tahap pelbagai boleh dikekalkan dalam editor dengan mudah. Pelbagai pandangan dan simulasi boleh dijalankan secara berasingan. Bagaimana jika seorang pemaju mahu memecah skrin pembangunan dua tahap untuk menukar bolak-balik dengan cepat? Ini mungkin tugas kejuruteraan perisian yang sukar, atau seni bina editor boleh melaksanakan beberapa bentuk ruang.


Idea Pelaksanaan

Pengurusan Ruang

Apa yang menguruskan semua ruang? Ramai pemaju permainan boleh melakukannya dalam amalan mereka yang semuanya mesti dapat dimiliki oleh beberapa pengurus. Semua ruang mesti dapat diuruskan oleh entiti tunggal ini, bukan? Sebenarnya paradigma semacam ini tidak perlu sepanjang masa.

Dalam enjin SEL, ruang dibina dari satu lokasi, dan boleh dilihat dengan nama dengan kamus, tetapi mungkin lebih baik untuk kebanyakan projek untuk membiarkan ruang diuruskan berdasarkan kes demi kes. Dalam enjin SEL, ruang dibina dari satu lokasi, dan boleh dilihat dengan nama dengan kamus, tetapi mungkin lebih baik untuk kebanyakan projek untuk membiarkan ruang diuruskan berdasarkan kes demi kes.

Cadangan yang baik adalah dengan hanya membiarkan pengguna memperuntukkan ruang dan membebaskannya mengikut kehendaknya. Ia mungkin akan baik untuk menggunakan peruntukkan tunggal untuk tingkah laku ini. Walau bagaimanapun, pengurusan contoh ruang itu sendiri, seperti yang dijumpai melalui pengalaman, mungkin lebih baik tidak bimbang; biarkan ia kepada pengguna.

Nota: apabila ruang dibinasakan, ia harus membersihkan semua objek dalam! Jangan mengelirukan kekurangan pengurus dengan kekurangan pengurusan seumur hidup.

Komponen dan Subspasi

Komponen sering didaftarkan dengan sistem masing-masing dalam enjin berasaskan komponen. Walau bagaimanapun, dengan ruang ini menjadi tidak perlu. Sebaliknya, setiap ruang harus mengandungi apa yang disebut subspace. Subspace boleh sangat remeh untuk melaksanakan-katakan, sebagai vektor objek komponen. Idea ini hanya mengandungi pelbagai jenis bekas komponen dalam setiap ruang. Apabila komponen dibina, ia meminta apa ruang yang berkaitan dengannya, dan daftar sendiri dengan ruang bawah tanah.

Ruang tidak semestinya mempunyai setiap jenis subspace dalam dirinya sendiri. Sebagai contoh, ruang menu mungkin tidak memerlukan apa-apa simulasi fizikal, dan oleh itu mungkin tidak mempunyai keseluruhan contoh dunia fizik yang mewakili subspace fizik.

Akhir sekali, perlu diingatkan bahawa dalam seni bina berasaskan komponen objek permainan anda harus mempunyai pemegang atau penunjuk ke ruang yang mereka tinggali. Dengan cara ini, ruang menjadi sebahagian daripada pengenal unik objek permainan itu sendiri.


Kesimpulannya

Ruang sangat mudah dilaksanakan dan menyediakan banyak manfaat penting. Untuk hampir semua enjin permainan dan permainan yang ada, penambahan ruang akan menjadi yang positif kerana kemudahan pelaksanaan. Gunakan ruang, walaupun untuk projek yang sangat kecil dan permainan yang sangat kecil!

Sebagai sumber, pelaksanaan ruang saya sendiri adalah sumber terbuka untuk tontonan umum dalam permainan SEL enjin.

Advertisement
Advertisement
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.