Minggu, 09 Mei 2010

Membuat Aktor Tutorial, Bagian 1 - Tinjauan umum dan Konsep (Creating an Actor Tutorial, Part 1 – Overview and Concepts)

Jadi Anda sudah mengerti STAGE. Anda telah membuat beberapa dunia yang menarik dengan menempatkan dan mengatur MESH statis. Namun, untuk menyelesaikan aplikasi, Anda memerlukan sesuatu yang lebih. Lagi pula, beberapa statis Meshes dan Box Sky tidak akan berhasil. Anda perlu truk yang bergerak, persediaan barang, gerakan penjaga sensitif, atau bahkan sebuah peluncur roket. Singkatnya, Anda memerlukan kemampuan untuk membuat Aktor Anda sendiri!

Tutorial ini mengajarkan Anda semua yang perlu Anda tahu untuk membuat Aktor Anda sendiri. Dengan mengikuti 3 bagian tutorial ini, Anda akan mempelajari cara membuat bendera berkibar yang dapat Anda gunakan tepat di editor. Anda akan mempelajari cara membuat sebuah kompleks Aktor, ukuran, kecepatan, dan tinggi melalui ActorProxy, dan bahkan membuat bendera Anda dapat diakses untuk editor.

Tutorial ini mengasumsikan Anda telah bekerja dengan STAGE. Jika tidak, silakan lihat 'Getting to Know the Editor'. Catatan - tutorial ini menggunakan kata 'game', 'Simulasi', dan 'Pelatihan Aplikasi' secara bergantian.
Bagian 1 - Aktor dan Proxy dan Properties, Oh My!
Sebelum Anda bisa memulai membuat bendara yang bergerak, ada beberapa hal yang perlu Anda ketahui tentang bagaimana STAGE dibangun. Editor Delta 3D adalah dasar dari sebuah arsitektur yang sangat dinamis. Bahkan, STAGE dirancang dari dasar untuk mendorong kustomisasi. Karena kita tidak pernah bisa mengantisipasi jenis objek yg kita perlukan, kami membangun sebuah arsitektur yang benar-benar umum dan membiarkan Anda membangun objek permainan Anda sendiri! Berikut adalah 3 konsep kunci yang perlu Anda ketahui.

Aktor - Sebuah Aktor adalah setiap objek permainan yang memiliki sifat-sifat yg ingin anda kerjakan dengan Editor. Aktor benar-benar bisa menjadi apa pun yang dapat Anda bayangkan, dari pesawat terbang sampai lampu berkerlip, senjata kecil sampai monster hijau raksasa. Aktor adalah objek khusus yang membantu mendefinisikan permainan atau simulasi. Dalam bagian 2 dari tutorial ini, Anda akan menciptakan Aktor pertama disebut 'TesselationActor'.

ActorProxy - Sebuah ActorProxy adalah lapisan pembungkus untuk Aktor. Proxy sangat sederhana, data orientasi kelas yang memiliki dua pekerjaan utama. Pertama, proxy menyediakan kelas yang umum dan seragam yang dapat dipahami editor. Kedua, mereka tahu segala sesuatu tentang Aktor yang mereka bungkus, terutama propertiesnya. Pada bagian 2, Anda akan membuat ActorProxy untuk bendera yang disebut 'TesselationActorProxy'.

ActorProperties - ActorProperties adalah property dari sebuah Aktor yang muncul di PropertyEditor. Aktor properties memungkinkan desainer untuk mengubah cara kerja objek. Semakin banyak properti yg Anda ekspos, obyek Anda menjadi lebih berguna. Bila Anda mengekspos banyak properties penting untuk objek Anda, Anda mengizinkan desainer level untuk mengambil keuntungan penuh dari Aktor Anda tanpa mengubah kode Anda. Pada bagian 2, Anda akan mengekspos sifat Aktor untuk 'Lebar', 'Tinggi', 'Jumlah Langkah', 'Periode', 'Amplitudo', 'Tahap', dan 'Tekstur'. Dengan mengubah nilai properti ini, Anda bisa mengubah ukuran bendera Anda, membuatnya bergerak lebih cepat, memberikan riak lebih, atau bahkan mengubah tekstur. Gambar berikut menunjukkan beberapa properti di editor.


Figure 1 – Properties Aktor Tesselation

Sekarang Anda tahu dasar-dasar tentang Aktor dan ActorProxies, ada satu langkah terakhir untuk dijalani. editor tidak dapat menemukan secara ajaib kelas ActorProxy, kita perlu menceritakannya tentang objek baru. Apa yang perlu anda lakukan adalah menaruh ActorProxy anda ke sebuah library yang dapat ditemukan editor. Setelah Anda membuat library ini Anda akan dapat mengimpor langsung ke editor. Untungnya, ini terdengar lebih sulit dari prakteknya. Bahkan, seperti yang akan Anda lihat di bagian 3 dari tutorial ini, dibutuhkan sekitar 5 baris kode aktual untuk melakukan hal ini. Ditambah lagi, Anda hanya akan perlu 1 library untuk semua aktor Anda.

OK. Jadi, mari kita simpulkan, untuk menciptakan Aktor baru untuk STAGE, anda harus melakukan langkah-langkah berikut :


1) Buat Aktor anda – ini merupakan keahlian anda!

2) Membuat Aktor Proxy – wrapper data sederhana

3) Membuat sebauh Library Aktor – satu kali saja

4) Tambahkan Proxy ke Library – sekitar 5 baris kode


Sekarang, Anda cukup tahu tentang arsitektur dasar STAGE untuk memulai.


Serius, berhenti di sini! Jika Anda hanya ingin tahu bagaimana melakukan sesuatu dengan contoh, saatnya untuk berpindah ke Bagian 2 dari tutorial.


Namun, jika Anda adalah tipe teknis dan benar-benar ingin tahu apa yang terjadi, maka Anda akan senang mengetahui bahwa kami mempunyai beberapa informasi yang bagus di depan. Seperti yang kita tahu, Dynamic Actor Layer (DAL) benar-benar dirancang sebelum kita pernah menulis baris kode. Berikut ini adalah beberapa materi yang digunakan dalam perancangan detil pembangunan DAL.


2. Dynamic Actor Layer (DAL)


Dynamic Actor Layer (DAL) menyediakan mekanisme, fleksibel yang tidak mengganggu untuk mengekspos secara umum sifat pelaku permainan di C + +. Dua komponen utama rancangan ini adalah ActorProxies dan ActorProperties. Komponen proxy adalah pembungkus untuk permainan aktor yang mendasari dan memegang kumpulan sifat individu. Komponen properti mengekspos data untuk properti aktor permainan tunggal melalui pengambil dan penyetel fungsi objek; mirip dengan spesifikasi Java Bean. proxy itu tahu tentang propertiesnya dan properties tahu bagaimana untuk mengakses data. Kedua komponen ini digunakan untuk mengekspos secara umum yang mendasari semua data tanpa pernah memodifikasi kode game aktor asli. Penggunaan data komponen ini, bukan permainan aktor yang mendasari, yang mempromosikan enkapsulasi data dan penggunaan kode kembali.


Figure 2 - Overview


Dynamic Aktor Layer dan gambaran arsitektur editor tercatat pada Figure 2. Tujuan utama Editor adalah untuk memungkinkan manipulasi aktor dalam sebuah adegan yang diberikan. Untuk mendukung ini, DAL memaparkan template generic yang memungkinkan STAGE untuk bekerja dengan aktor sebagai objek umum. Inti dari konsep ini adalah bahwa setiap aktor harus ditangani secara umum hanya menggunakan nama, id, dan sebuah koleksi properti. Penjelasan rinci dari komponen-komponen dari DAL akan dibahas selanjutnya.


3. ActorProxy


Sebagaimana disebutkan di atas, Aktor adalah setiap obyek dalam aplikasi pelatihan Anda yang memiliki perilaku dan perlu dimanipulasi dalam STAGE. Kelas Aktor bisa apa saja, editor harus dilindungi dari cara kerja internal dari setiap objek . Untuk membuat hal ini terjadi setiap Aktor harus memiliki kelas proxy terkait yang memungkinkan akses terhadap properties internal. Pada dasarnya, ActorProxy adalah saluran bagi aktor untuk berkomunikasi perilaku mereka untuk aplikasi eksternal atau untuk memastikan suatu protokol komunikasi konsisten di antara aktor-aktor. Figure 3 menunjukkan diagram kelas dari ActorProxy, Aktor (DeltaDrawable), dan ActorProperty.



Figure 3 – Diagram Kelas ActorProxy


Mengikuti kelas yang ada pada kelas diagram dalam Figure 3.


DeltaDrawable

Ini adalah kelas dasar untuk semua Aktor dalam sistem. The DeltaDrawable (dtCore:: DeltaDrawable) adalah kelas dasar dari semua objek Delta3D yang berada di lokasi. Selain itu, ia mempunyai pelacakan informasi seperti nama tag dan sebuah ID yang unik.


MyTruck
Ini adalah contoh dari pengguna kelas Aktor dibangun. Beberapa akan dibangun secara internal sebagai bagian dari Editor, namun banyak dari sini akan dibangun oleh pengembang akhir dan mungkin hanya diketahui aplikasi khusus mereka sendiri. Aktor kelas bisa cukup banyak. Mereka dapat memiliki pencahayaan, bagian diartikulasikan, gerakan, AI, meshes, suara, triggers, dan hal lain yang dapat Anda lakukan dengan Delta3D. MyTruck bisa menggambar dirinya dengan cara apapun mereka tetap sesuai dalam arsitektur Delta3D. MyTruck dapat memiliki banyak atau nol properti, dapat memiliki referensi untuk membagikan sumber daya, dan bisa apa saja dari sebuah billboard persegi menjadi ruang yang penuh .


ActorProxy

Ini adalah kelas dasar untuk semua Aktor Proxies. Tujuan utama proxy adalah untuk mengekspos atribut kelas Aktor sebagai serangkaian properti. Proxy memiliki metode interface untuk mendapatkan dan menyetel propertinya, mendapatkan aktor, dan mendapatkan jenis aktor. Setiap aktor harus memiliki Proxy. Editor secara berkala akan meminta property dengan nama atau bahkan mengubah nilai properti menggunakan setValue() method.


MyTruckProxy
Ini adalah contoh dari pengguna yang sebenarnya Aktor Proxy dibangun. Dalam hal ini, truk memiliki properti kecepatan disebut, sehingga proxy Truck mungkin mengekspos sifat yang disebut 'speed' untuk editor. Lalu, proxy Truck bisa menangani permintaan seperti setProperty ("speed", nilai) dengan memanggil myTruck.setSpeed (nilai). Dalam hal ini, TruckProxy tahu pekerjaan kelas Truck. Ia tahu kecepatan yang sesungguhnya adalah nilai floating point. Seringkali proxy akan masuk melalui data. Namun, kadang-kadang, proxy tersebut akan perlu melakukan manipulasi data. Misalnya, kecepatan mungkin telah diwakili oleh pecahan vektor (xspeed, yspeed, dan zspeed). Dalam hal ini proxy mungkin harus 3 properti kepada editor di mana hanya ada satu nilai yang sebenarnya mendasari. Hal ini mungkin bergantian menggunakan vec3. Dalam kasus lain, proxy bertanggung jawab untuk mengetahui bagaimana menangani sebuah setProperty ("xSpeed", nilai) permintaan dan pengaturan nilai kecepatan internal truk.

4. ActorProperty


Sebagaimana disebutkan di atas, kelas ActorProperty menyediakan meakisme sebuah pengambil / penyetel untuk mengakses properti dari kelas yang sama dengan paradigma pemrograman Java. Figure 4 melukiskan suatu pandangan yang lebih rinci dari kelas ActorProperty termasuk bagian dari properti kelas untuk tipe data tertentu.



Figure 4 – Diagram Kelas ActorProperty


Para pengambil dan penyetel bagian dari kelas ActorProperty adalah Functors (Fungsi Objects) yang referensi pengambil dan metode penyetel pada properti kelas yang diberikan. Karena itu, ketika sebuah ActorProperty dibuat, ia tahu bagaimana untuk menyimpan dan mengambil data yang diwakilinya. Kelas ActorProperty juga digunakan untuk menyampaikan informasi tentang sifat dari Aktor hingga Editor. ActorProperty memiliki nama, nama tampilan, deskripsi, dan tipe pencacahan. Kelas properti mungkin juga memiliki daftar enumerations jika properti itu sendiri merupakan enumerations. Sebagai contoh, property dari truk memiliki kecepatan yg mendukung Lambat, Sedang, dan Cepat atau cahaya yang mungkin memiliki properti jenis dengan pengaturan dari Directional, Strobe, Pulse, Omni, dll .


5. ActorLibraries


ActorLibraries adalah komponen didistribusikan yang melayani untuk paket kelompok aktor terkait dan aktor proxy. ActorLibraries adalah library dinamis kode C + + yang dimuat ke editor atau aplikasi lainnya. Figure 5 menunjukkan diagram kelas tinjauan subsistem Aktor Library. Penjelasan rinci setiap komponen diberikan di bawah ini.


Figure 5 – Komponen Dynamic Actor Layer

LibraryManager

Kelas ini merupakan kelas utama dalam Library Manager. Kelas memiliki daftar library yang terdaftar dengan Manager serta daftar dari tipe Aktor yang masing-masing dapat menciptakan library. Ini juga merupakan kendaraan utama untuk menciptakan Aktor proxy baru. Manajer menggunakan pola tunggal.


ActorPluginRegistry
Ini adalah kelas dasar yang memperpanjang pengembang untuk membangun registri mereka sendiri. Perilaku yang paling penting dalam registri adalah kemampuan untuk mengambil Jenis Aktor dan membuat Aktor baru melalui proxy Aktor. Registri adalah yang bertanggung jawab untuk mengetahui jenis Aktor yang dapat dibangun. Sejak Editor tidak tahu apa-apa tentang kelas-kelas objek, registri bertanggung jawab untuk memahaminya. Kelas dasar registri juga menyebabkan pabrik objek yang menyediakan sebagian besar, jika tidak semua, dari tipe aktor ActorPluginRegistry's untuk kemampuan pemetaan aktor.


MyPluginRegistry
Ini adalah implementasi pihak ke-3 dari Registry. Para pengembang harus membuat dan melacak tipe Aktor yang memahami serta dapat mengambil Jenis Aktor dan membuat Aktor proxy baru. Hal ini mungkin kelas yang sangat sederhana yang menciptakan dan register aktor yang tipe dengan pabrik sehingga mereka tersedia pada saat run-time.


ActorType
Ini merupakan kelas data sederhana yang memiliki informasi yang menggambarkan jenis Aktor tertentu. Akan ada satu Aktor Jenis untuk setiap kelas Aktor unik seperti 'BouncyTruck' atau 'AgressiveSoldier'. Untuk setiap kelas aktor, harus ada Jenis Aktor dengan nama, kategori, dan deskripsi. Kategori ini memiliki catatan khusus karena digunakan untuk visual semacam kelas di editor. Ini mengikuti sebuah titik notasi hirarkis (ex. "Vehicles.Trucks.NeatTrucks") tersebut digunakan untuk kelas kelompok dalam beberapa panel UI. Hal ini juga dapat digunakan untuk mencari objek.


6. Project/Map


Konteks proyek pada dasarnya adalah "rumah" direktori peta Anda. Hal ini bertanggung jawab atas sumber daya penyimpanan diimpor ke Editor; seperti statis meshes, sistem partikel, tekstur, dan suara. Semua aktor impor di peta disimpan dan referensi relatif terhadap konteks proyek peta. Rincian Proyek dan interaksi kelas Peta berada di luar cakupan tutorial ini, namun Figure 6 menunjukkan diagram kelas yang melukiskan interaksi dasar tersedia untuk Proyek dan kelas Peta.



Figure 6 - Project – Diagram Kelas Map

Ini menyimpulkan gambaran dari arsitektur dari STAGE. Jika Anda mengikuti semua ini, maka Anda lebih dari siap untuk pergi ke Bagian 2 dari tutorial ini.