Senin, 26 Oktober 2015

Tugas T1 : Sampul, Kata pengantar, Bab 1 dan Bab 2




Front Cover

Back Cover

.

Kata Pengantar


Puji dan syukur Penulis panjatkan kepada Allah SWT yang telah memberikan nikmat serta karunia-Nya sehingga Penulis dapat menyelesaikan penulisan buku ini dengan baik. Judul penulisan buku yang dibuat adalah “Pengenalan Game Engine Turublenz”. Tujuan dari pembuatan penulisan buku ini yaitu sebagai buku petunjuk untuk pengguna software game engine Turbulenz terutama bagi pengguna yang masih dalam tingkat pemula agar lebih tertarik dan terbantu dalam penggunaan software game engine Turbulenz. 

Penulis menyadari bahwa tanpa adanya bimbingan dan dukungan penuh dari semua pihak, maka penulisan buku ini tidak akan berjalan dengan lancar. Oleh karena itu, pada kesempatan ini penulis meminta izin untuk menyampaikan ucapan terima kasih kepada bapak Dr. rer. nat. I Made Wiryana, SKom, SSi, MAppSc., selaku dosen matakuliah softskill pengantar teknologi game yang telah memberikan pengarahan dan bimibingan dalam pembuatan penulisan buku ini. 

Serta semua pihak yang telah banyak membantu terwujudnya penulisan buku ini. Akhir kata semoga penulisan buku ini dapat memberikan manfaat bagi semua pihak yang bersangkutan, bagi Penulis pada khususnya dan bagi para pembaca pada umumnya. 

Depok, 12 Juni 2015

Penulis

.

BAB I
PENDAHULUAN


1.1 Latar Belakang Masalah

.

Teknologi komputer dewasa ini sudah sangat berkembang pesat diberbagai bidang, baik ilmu pengetahuan, pekerjaan, seni, dll. Pemanfaatan teknologi inidirasakan tidak hanya oleh orang dewasa, melainkan juga anak-anak. Pekerjaanmanusia yang dikerjakan sendiri oleh manusia (manual) sudah banyak digantikanoleh komputer. Dengan begitu semua dapat dikerjakan lebih mudah, praktis dan hemat waktu. 

Game engine Turbulenz merupakan game engine berbasis web yang bersifat open source sehingga penggunanya dapat bebas menggunakan game engnie tersebut sesuai dengan kebutuhan. Dengan sifatnya open source masih sangat disayangkan karena penggunaanya masih banyak belum diketahui loleh banyak orang. 

Oleh sebab itu penulis ingin membuat buku “Pengenalan Game Engine Turbulenz” yang dapat menarik minat pembaca dan membantu pengguna game engine Turbulenz agar dapat menggunakannya. 

1.2 Rumusan Masalah

.

Rumusan masalah dalam buku ini terdiri dari hal - hal seperti berikut :

• Apakah sebenarnya game engine Turbulenz itu?

• Bagaimana langkah pertama yang harus dilakukan untuk menggunakan game engine Turbulenz

1.3 Batasan Masalah

.

Batasan masalah dalam penulisan buku ini meliputi hal - hal sebagai berikut :

1. Pengenalan game engine turbulenz

2. Instalasi game engine Turbulenz

3. Penggunaan dasar game engine Turbulenz bagi pemula

1.4 Tujuan Masalah

.

Tujuan dari permasalahan yang ada dalam buku ini adalah:

• Untuk menarik minat pembaca tentang game engine Turbulenz.

• Untuk membantu pengguna game engine Turbulenz dalam penggunaanya. 

1.5 Metode Penelitian

.

Metode yang kami gunakan adalah deskriptif, kajian pustaka dilakukan dengan mencari literature di internet dan dokumen panduan game engine Turbulenz.

1.6 Sistematika Penulisan

.

Dalam Penulisan buku ini untuk mempermudah pemahaman pembaca, penulis membuat sistematika penulisan sebagai berikut :

Bab 1 : Pendahuluan

Dalam bab ini diuraikan latar belakang masalah, batasan masalah, metode penelitian, selanjutnya tujuan penulisan dan terakhir sistematika penulisan yang memberikan uraian dan gambaran dalam penulisan ini.

Bab 2 : Pengenalan

Turubulenz Menjelaskan tentang Turbulenz sebagai game engine berbasis web yang bersifat open source.

Bab 3 : Instalasi Turbulenz

Menjelaskan tentang bagaimana langkah – langkah yangharus dilakukan untuk instalasi game engine Turbulenz pada komputer.

Bab 4 : Penggunaan Turbulenz

Penggunaan dasar dalam game engine Turbulenz akan dijelaskan dalam bab ini.

Bab 5 : Penutup

Pada bab ini akan berisi kesimpulan dan saran terhadap buku ini.

.

.


BAB II
PENGENALAN TURBULENZ


2.1. Pengenalan Turbulenz 

.

Turbulenz adalah game engine HTML5 dan diadopsi oleh server-side API yang tersedia dalam JavaScript dan naskah dimana fungsinya untuk membangun dan mendistribusikan objek 2D dan 3D game yang berjalan pada platform yang mendukung fitur HTML5 seperti browser terkini tanpa memerlukan plugin. Game engine The Turbulenz menyediakan solusi untuk pengembangan game untuk kualitas generasi berikutnya yang dapat dimainkan langsung di browser. Teknologi ini diselenggarakan di dua kondisi utama yaitu: 

• Runtime: dieksekusi pada mesin pengguna akhir 

• Offline: digunakan hanya selama pengembangan game Bagian ini memberikan gambaran dua daerah ini fungsi serta beberapa rekomendasi dan pedoman untuk mengembangkan game pada browser.

2.2. Runtime API

.

Runtime dapat dikategorikan menjadi dua jenis kode yaitu: 

• API tingkat rendah: Sebuah set antarmuka menyediakan akses ke fungsionalitas tingkat rendah. API pada tingkat ini mirip dalam fungsi ke API terkenal seperti OpenGL, OpenAL, dll Fungsi ini disediakan baik oleh ekstensi browser Turbulenz (kode asli), atau dengan pembungkus tipis di atas antarmuka yang disediakan oleh browser (seperti sebagai WebGL, WebAudio, dll). Dalam kasus kedua, Turbulenz API akan menentukan interface browser menyediakan dan dinamis memilih yang paling tepat. 

• API Tingkat tinggi: Dimana koleksi perpustakaan dari JavaScript yang dibangun di atas pemodelan API tingkat rendah yang menyediakan para pengembang dapat mengembangkannya dengan fitur seperti Adegan grafik, Sistem Bahan dan optimimalisasi Renderer, dll

2.2.1. Tingkat rendah API 

.

Antarmuka terdiri dari beberapa modul yang disebut Device, yang memberikan: 

• Antarmuka yang efisien di atas perpustakaan stabil dan fleksibel yang ada, misalnya Bullet, OpenAL atau WebGL. 

• Antarmuka yang efisien di atas akses hardware tingkat rendah, misalnya mekanisme masukan atau operasi vektor matematika. Perangkat ini tidak terbatas pada jenis tertentu dari permainan, termasuk dalam kategori yang cukup kuat dan cukup fleksibel untuk menutupi kebutuhan permainan generasi berikutnya. Objek perangkat biasanya dibuat sekaligus dengan melewati parameter objek untuk membuat fungsi pada obyek global theTurbulenzEngine. Setelah dibuat mereka nantinya bisa diambil dengan memanggil fungsi get dengan sesuai. Misalnya, createGraphicsDevice dan getGraphicsDevice.

Alat Grafik: 

• Sederhana, dimana shader berbasis API. 

o Shader mungkin berisi beberapa Teknik, baik tunggal atau multi-pass. 

o Setelah Teknik shader diatur pada Device, parameter yang diperlukan oleh kode program dapat diperbarui oleh objek Technique Parameter. 

o TechniqueParameter memiliki beberapa referensi Tekstur, TechniqueParameterBuffers atau nilai-nilai lainnya. 

o Beberapa TechniqueParameters dapat diatur pada perangkat sekaligus.

• Vertex buffer, Indeks buffer dan Tekstur dapat dibuat, diperbarui dan menghancurkan dinamis.

• Multiple Streams Vertex buffer dapat digunakan pada waktu yang sama. 

• Dukungan untuk 1D, 2D, 3D dan tekstur cube.

o Setiap format piksel didukung oleh perangkat keras.

• Asynchronous pemuatan sumber daya.

o Beberapa file dapat didownload dengan cepat, kode JavaScript akan dijalankan ketika sumber daya yang tersedia untuk penggunaan yang telah disetujui.

• Beberapa format file gambar.

o DDS, JPG, PNG dan TGA.

• Dukungan untuk ekstensi arsip yang berisi beberapa file gambar.

o fleksibilitas lebih baik untuk penggunaan bandwidth secara optimal.

• query Occlusion. o Jumlah piksel yang diberikan dapat dilihat untuk bagian dari rendering.

o Tersedia dalam modus Plugin saja.

• dukungan Fullscreen (platform yang didukung).

• Ambil fitur screenshot.

• dukungan playback video.

o WebM, MP4. 

o Render video sebagai tekstur. 

o kontrol Putar bermain, pause, stop, melanjutkan, mundur. MathDevice

• Jenis Matematika: 

o Vector2 Vector3, Vector4 

o Matrix33, Matrix34, Matrix43, Matrix44

o angka empat, QuatPos 

o AABB

• Format Penyimpanan dioptimalkan berdasarkan dukungan yang tersedia 

• operasi Dioptimalkan mendukung parameter tujuan, mengurangi alokasi objek. 

• Array ke / dari Matematika utilitas jenis konversi.

Alat Fisik: 

3D 

• Mudah digunakan simulasi fisika efisien. 

o Dioptimalkan implementasi JavaScript. 

o Dalam mode Plugin, ini adalah pembungkus ringan sekitar Bullet Fisika Perpustakaan. 

- http://bulletphysics.org/wordpress/ 

• tubuh dan benda-benda tabrakan kaku. 

o Plane, Box, Sphere, Kapsul, Cylinder, Cone, Segitiga Mesh, Convex Hull. 

• Kendala. o Point ke Point, Engsel, Cone Twist, 6DOF, Slider. 

• Ray dan pertanyaan menyapu cembung. 

o Kembali titik terdekat dari dampak dan permukaan normal.

• representasi karakter. 

o Untuk digunakan dengan 1/3 game orang. 

o Termasuk properti untuk kecepatan, posisi, mendekam, tinggi melompat, kematian, di tanah.

• callback Kontak.

o Rigidbodies, karakter, benda tabrakan.

o Disebut pada presolve, menambahkan, diproses, dihapus.

o Filter tanggapan oleh topeng.

o Pemicu tanpa respon tabrakan.

Catatan Pengembang dapat melihat perilaku yang sedikit berbeda di plugin dan kanvas implementasi PhysicsDevice.

2D 

• Efisien 2D dalam bidang fisika secara simulasi ditulis secara khusus untuk JavaScript.

• Bentuk.

o Lingkaran, Kotak, Rectangle, Regular Polygon, Custom Polygon.

o Buat bentuk sebagai sensor.

o Bentuk pengelompokan dan masker interaksi.

• Tabrakan.

o Sapu & Prune, Box Tree Broadphases.

o Perlengkapan untuk Raytest, ttd Jarak, Intersection, Berisi Point, Sapu Test.

• Simulasi dunia.

o Beberapa kelompok simulasi. 

o gravitasi pilihan. 

o iterasi simulasi dipersonalisasi.

• simulasi objek yang kaku. 

o Dinamis, Statis, benda kinematik.

• Bahan. 

o Elastisitas, Static / Dinamis / Gesekan bergulir, Density.

• Arbiter. 

o Kontak pengelompokan. 

o Informasi kontak: Posisi, Penetrasi, Normal / Tangent Impulse

• Kendala. 

o Point to Point, Jarak, Weld, Angle, motor, Line, Pulley, Custom Kendala.

• Debug rendering. 

o kaku Badan, Kendala, Dunia, Lines, Curves, Rectangles, Lingkaran, Spiral, Linear / Spiral Springs. 

o Mengaktifkan dan menonaktifkan rendering jenis. 

o Scaling untuk Draw2D viewport.

Alat Suara: 

• Mudah digunakan wrapper efisien fitur audio hardware. 

o Memanfaatkan Web Audio, <Audio> tag, OpenAL tergantung pada dukungan platform yang. 

• sumber suara 3D. o Posisi, Arah, Velocity, Gain, Pitch, loop. 

• ditiru 3D suara untuk pembuatan stereo. 

• file suara Asynchronous pemuatan.

o Beberapa file sumber daya dapat didownload dengan cepat, kode JavaScript akan diberitahu ketika sumber daya yang tersedia untuk penggunaan. 

• Uncompress audio yang dinamis. 

• Beberapa format file suara:

o OGG, WAV, MP3.

• permintaan didukung untuk kemampuan platform.

o Muat format audio yang terbaik untuk platform.

• Efek / Filter dukungan:

o Reverb, Echo, Low Pass

Catatan: Ketersediaan antarmuka tergantung pada platform.

Alat Jaringan: 

• Bi-directional, full-duplex saluran komunikasi, lebih soket TCP. 

o Memanfaatkan Browser dukungan WebSocket. 

o pelaksanaan asli Efisien WebSockets untuk platform tanpa dukungan. 

- http://en.wikipedia.org/wiki/WebSocket 

- http://dev.w3.org/html5/websockets/

• jabat tangan HTTP-kompatibel sehingga server HTTP dapat berbagi HTTP mereka default dan HTTPS port (80 dan 443) dengan server WebSocket. 

• Dukungan untuk koneksi yang aman sebagai bagian dari standar. 

• Dukungan untuk kompresi data dengan ekstensi mengempis-frame. InputDevice 

• Akses ke jenis masukan.

o Keyboard, Mouse, Xbox360 Pad, Joystick, Roda, Touch, Multi-touch

• sistem acara Asynchronous ketika perubahan negara.

o kode JavaScript diberitahu ketika input berubah.

o Acara untuk keydown, keyup, mousedown, mouseup, roda mouse, mousemove, Gunaka mouse, mouseenter, mouseleave, paddown, padup, fokus, blur, mouselocklost, touchstart, touchend, touchmove, touchmove, touchenter, touchleave, touchcancel. • fitur dari mouse tambahan:

o bersembunyi / menampilkan ikon Platform, mengunci / unlocking (platform yang didukung). 

• Bahasa keymapping independen.

2.2.2. API Tingkat Tinggi 

.

Ini tingkat lebih tinggi perpustakaan JavaScript dirancang untuk fleksibilitas dan kemudahan penggunaan. JavaScript bahasa itu sendiri menyediakan semua mekanisme refleksi diperlukan untuk debugging runtime dan tweaking, mendukung pembuatan kode dinamis dan serialisasi objek.

Hanya didokumentasikan benda, fungsi dan sifat harus digunakan. Item yang tidak berdokumen adalah rincian implementasi dan mungkin berubah di masa depan.

Adegan grafik: 

• format file yang fleksibel JSON. 

o Bisa menggambarkan baik seluruh adegan atau jerat individu.

• Asynchronous pemuatan referensi eksternal. 

o Jika adegan berisi referensi ke jerat eksternal mereka semua dimuat secara paralel dan melekat ke adegan utama ketika siap. 

o Dukungan untuk digunakan kembali optimal mesh yang sama di lokasi yang berbeda.

• sistem penyaji Pluggable. 

o Hubungan antara geometri, efek dan bahan diselesaikan pada saat runtime. 

o Mudah swap beberapa teknik render untuk aset yang sama. 

• berbagi Geometri. 

o informasi Geometri dapat optimal digunakan kembali di beberapa lokasi adegan dengan efek render yang berbeda. 

• adegan Fleksibel node hirarki. 

o Lights, geometri, Animasi, Fisika. 

• query Visibilitas.

o Portal, frustum, Tumpang Tindih Box. 

• Sortasi dan pengelompokan.

o node Terlihat diurutkan dan dikelompokkan untuk render optimal: Buram, Transparan, Decal. 

• evaluasi malas update simpul.

Animasi 

• animasi 3D untuk adegan geometri. 

• Skeleton / Skinning animasi. 

• Animasi pengendali. 

o interpolasi, kelebihan beban Node, Referensi, Transisi, Blend, Mask, Pose, Kulit, GPU Kulit, Kupas Node. 

o Controller dapat dikombinasikan untuk efek yang diinginkan.

• Dinamis memperbarui adegan data. Resource Manager 

• Asynchronous dimana pemuatan menghindari duplikasi.

o lapisan remapping tambahan untuk memudahkan pengalihan URL. 

• Menyediakan sumber daya default jika hilang. 

o Permainan dapat memberikan sumber daya standar kustom untuk digunakan ketika salah satu yang diperlukan hilang atau masih loading.

• Beberapa manajer untuk kebutuhan individu. 

o Animasi, Efek, Font, Shaders, Suara, Textures. 

• Bandwidth dan perangkat keras skala dengan memilih aset yang berbeda dan efek tergantung pada mesin dan koneksi internet kinerja. 

• Cache aset sisi klien untuk mengoptimalkan dan menggunakan kembali permintaan.

Permintaan Server 

• HTTP & AJAX permintaan fungsi 

o Otomatis coba lagi dan penanganan error. 

o dukungan Cross-browser. 

o terenkripsi dukungan API. Renderer tangguhan

• Unlimited jumlah lampu. 

o Point, Spot, Directional, Ambient. 

• Tekstur falloff cahaya berdasarkan.

o Memungkinkan adanya multi-warna lampu dan bayangan palsu murah, misalnya kipas di bawah sumber cahaya.

• Bahan dengan peta beberapa tekstur. 

o warna specular dan intensitas, vektor normal, warna Cahaya, Alpha. 

• efek pasca dicabut. 

o Mudah untuk setup untuk penuh dalam efek pasca layar sebagai bagian dari shading akhir. 

o Copy, Fade dalam, memodulasi, Bicolor, Blend.

• peta bayangan eksponensial. 

o Reuse peta tekstur bayangan untuk menyimpan memori video. 

o blur Gaussian untuk hasil yang halus. 

o informasi mendalam Exponential untuk menghindari perdarahan ringan.

• kabut volumetrik. 

• 4 jenis GPU yang mengulitinya. 

• animasi UV. 

• Modus Wireframe. 

• Panggilan kembali untuk melewati tambahan.

o decal, transparansi, debug 

• Tersedia dalam modus Plugin saja. Maju Renderer 

• Unlimited jumlah lampu. 

o Point, Spot, Directional, Ambient. 

• Tekstur falloff cahaya berdasarkan.

o Memungkinkan multi-warna lampu dan bayangan palsu murah, misalnya kipas khas di bawah sumber cahaya.

• Bahan dengan peta beberapa tekstur. 

o spekular dan intensitas, vektor normal, warna Cahaya, Alpha. 

• efek pasca Pluggable. 

o Mudah diatur untuk penuh efek pasca layar sebagai bagian dari shading tangguhan akhir. 

o Copy, Fade dalam, memodulasi, Bicolor, Blend. 

• peta bayangan eksponensial. 

o Reuse peta tekstur bayangan untuk menyimpan memori video. 

o blur Gaussian untuk hasil yang halus. 

o informasi mendalam Exponential untuk menghindari perdarahan ringan.

• 4 GPU terintegrasi. 

• animasi UV. 

• Modus Wireframe. 

• Callback untuk melewati tambahan. 

o decals, transparansi, debug

Standar Renderer 

• Satu titik dan cahaya ambient. 

• Pixel berbasis pencahayaan. 

• Bahan dengan peta beberapa tekstur.

o warna specular dan intensitas, vektor normal, warna Cahaya, Alpha. 

• Optimzed untuk kecepatan dan kompatibilitas di berbagai hardware. 

• 4 berat GPU menguliti. 

• animasi UV. 

• Modus Wireframe. 

• Callback untuk melewati tambahan.

o decals, transparansi, debug Sederhana Renderer 

• Satu titik dan cahaya ambient. 

• pencahayaan Vertex berbasis. 

• Bahan dengan peta beberapa tekstur.

o warna specular dan intensitas, vektor normal, warna Cahaya, Alpha. 

• Optimzed untuk kecepatan dan kompatibilitas di berbagai hardware. 

• 4 berat GPU menguliti. 

• animasi UV. 

• Modus Wireframe. 

• Callback untuk melewati tambahan. 

o decals, transparansi, debug 2D Rendering

Draw2D 

• penyaji 2D sprite berbasis. 

o Batch sprite untuk efisiensi.

• mode Menggambar: 

o Menggambar: objek Menggambar literal, DrawRaw: Menggambar buffer data, DrawSprite: Menggambar referensi sprite.

• viewport Scalable. 

o Masukan koordinat pemetaan. 

• Urutkan mode. 

o Segera, tangguhan, Tekstur.

• mode Blend. 

o Buram, Additive, Alpha.

• dukungan Kustom shader. 

• Render-to-sasaran dukungan. 

• efek Tekstur. 

o Distort, Gaussian Blur, Bloom, Warna, Grey Scale, Sepia, Negatif, Saturasi, Hue, Brightness, Contrast. 

• data kinerja Recording. Canvas2D 

• Pelaksanaan Percepatan kanvas 2D API.

• Berjalan pada WebGL / OpenGL tergantung pada platform.

• SVG rendering. • Teks render via FontManager. 

• Untuk implementasi lengkap lihat spesifikasi elemen kanvas Keperluan 

• Alokasi dan pengelolaan buffer grafis.

o Vertex buffer. 

o Indeks buffer. 

• API dikendalikan JavaScript profiling. 

o waktu Per-fungsi akurasi milidetik. 

o Rekam top-down atau pohon fungsi bottom-up. 

o Hitung waktu yang dihabiskan oleh fungsi individu atau total yang dikeluarkan oleh sub-fungsi. 

o Mengidentifikasi file sumber dan nomor baris dari daerah bermasalah. 

• identifikasi penggunaan memori.

o Ambil hitungan obyek jenis objek dibangun. 

o Ambil foto dan bandingkan fluktuasi memori. 

• Enkripsi dan dekripsi dari permintaan server-side untuk format tzo. 

• utilitas Debug dengan fungsi stripping untuk kinerja. 

o menegaskan, log, batalkan. 

o stacktrace Lengkap. 

o Mendukung menambahkan fungsi kustom.

• Simulator Jaringan 

o Mensimulasikan latency dan perilaku jaringan. 

o Client-side manipulasi pesan sesi multiplayer.

o Mensimulasikan lonjakan lalu lintas jaringan. 

2.2. Alat Offline 

.

Alat Offline disediakan untuk memproses JavaScript dan HTML kode, dan untuk menghasilkan dan melayani aset diperlukan untuk runtime. Alat untuk pengolahan aset disediakan sebagai seperangkat mandiri alat baris perintah yang dapat dijalankan secara paralel ketika aset dependensi memungkinkan. 

Beberapa format file yang diubah menjadi format JSON kustom didukung oleh kode runtime, yang lain disimpan sebagai-adalah dan hanya pengolahan tambahan disediakan. 

Semua aset dan skrip yang dikompresi, dipadatkan dan unik menandai untuk transfer efisien antara server web dan browser. 7.2.1. Alat Alat kode yang ada untuk: 

• Opsional menghapus kode debugging (seperti menegaskan) 

• Concatenate dan kompak JavaScript dan semua perpustakaan direferensikan 

• Menghasilkan file HTML yang akan digunakan untuk menjalankan aplikasi selama pengembangan Alat aset disediakan untuk menangani langkah-langkah berikut membangun: 

• Konversi Collada file untuk JSON 

• Konversi CgFX file untuk JSON 

• Konversi file OBJ ke JSON 

• kompresi PXT 

• kompresi PNG 

• generator Cubemap 

• generator mipmap 

• tingkat Tekstur yang detail, dimana akan menghapus tingkat mipmap dalam demand 

2.3. Template dan Alat Membangun 

.

Ketika mengembangkan aplikasi JavaScript untuk berjalan di Turbulenz Mesin ini berguna untuk membangun dan menguji semua konfigurasi. Konfigurasi pembangunan kanvas-debug dibentuk untuk menjalankan dalam browser dan memungkinkan penggunaan alat-alat browser debugging. Konfigurasi rilis (Plugin dan kanvas) beban dan menjalankan bundel kode, sering dipadatkan. Dalam kasus modus Plugin, kode JavaScript dijalankan di dalam mesin yang disediakan oleh ekstensi browser Turbulenz (untuk alasan kinerja dan kompatibilitas), membuat debugging jauh lebih sulit. 

Kode pemadatan adalah optimasi penting untuk penyebaran dan dapat secara dramatis mengurangi ukuran kode yang perlu ditransfer dan diurai pada saat runtime. Turbulenz merekomendasikan alat UglifyJS digunakan dalam Plugin dan kanvas konfigurasi. Lihat rincian lebih lanjut maketzjsfor. 

Alat maketzjs dan makehtml mendukung penggunaan template markup untuk memungkinkan satu set file sumber yang akan dengan mudah dibangun di konfigurasi. Template di app Template contoh mengikuti struktur di bawah ini:

/*{{ javascript("scripts/script1.js") }}*/ 

2.3.1. Menegaskan dan Kode Debug 

.

Turbulenz JavaScript perpustakaan termasuk kode untuk memvalidasi parameter dan untuk menegaskan bahwa keadaan internal benar. Hal ini dimaksudkan untuk menangkap bug dan memperingatkan programmer masalah sedini mungkin dalam pelaksanaan pertandingan. Sejak debug kode tersebut memiliki biaya kinerja, harus dilucuti dari rilis membangun. 

Fungsi Debug disediakan oleh objek debug, dan panggilan ke metode pada objek ini dilucuti dari kode dengan alat maketzjs otomatis. 

Pengembang yang ingin memanfaatkan fungsi ini, dan pengembang dengan pipa kode disesuaikan harus menyadari perilaku kode debug, dan mungkin ingin menggunakannya di luar alat maketzjs, melalui jalur-debug.

Catatan :

Sebagai contoh, pengembang yang menjalankan compactor kode pada kode permainan sebelum melewati kode yang ke maketzjs dapat mangle penamaan objek men-debug sehingga mustahil untuk maketzjs untuk menemukan dan menghapus kode debug. Dalam hal ini, strip-men-debug harus dipanggil langsung saat buildingrelease dan konfigurasi kanvas, untuk memastikan bahwa kode debug dihapus sebelum pemadatan atau kebingungan berlangsung.

2.3.2. Generasi HTML 

.

Banyak contoh yang diberikan di sini dan di bagian lain menggunakan template default untuk menghasilkan halaman HTML untuk loading dan aplikasi yang berjalan. Template ini dibangun ke dalam alat, tetapi sangat mungkin untuk memasukkan HTML Anda sendiri, menimpa bagian dari template default atau membuat HTML template sendiri dari awal. 

Sejak Turbulenz game memiliki akses penuh ke browser JavaScript konteks, mereka dapat berinteraksi dengan DOM HTML dengan cara yang sama yang biasa kode JavaScript bisa. Meskipun hal ini tidak biasanya berguna untuk permainan dikerahkan, selama kontrol pengembangan HTML dapat digunakan untuk mengirim data ke permainan (seperti untuk tweaker parameter), atau untuk menampilkan data tentang pertandingan berjalan (seperti output teks kesalahan atau metrik log) .

Untuk menyesuaikan generasi HTML perlu memahami beberapa konsep template sederhana. Di sini kita secara singkat describeconditions, variabel, blok dan komentar, seperti yang diterapkan di mesin Jinja2 template, yang digunakan oleh alat Turbulenzz. 

2.3.3. Warisan, Blok dan Template default

.

HTML template dapat mewarisi dari file HTML lainnya menggunakan deklarasi dalam bentuk:

/*{% extends "file.html" %}*/

Dalam hal ini file.html yang inline dan blok setiap dinyatakan di dalamnya dapat diganti oleh file anak. Untuk memasukkan template default, dibangun ke dalam perangkat, gunakan:

/*{% extends "default" %}*/

(default template dapat diperiksa menggunakan bendera dump-default-template pada alat makehtml):

makehtml --dump-default-template

Misalnya, untuk menambahkan beberapa elemen HTML ke bar di sebelah kiri HTML template default Anda dapat mengganti blok dengan cara sebagai berikut: 

/*{% extends "default" %}*/

Blok didefinisikan oleh template default meliputi:

• tz_app_title mendefinisikan judul yang digunakan dalam jendela browser 

• tz_app_title_name merupakan gelar di atas halaman 

• tz_app_html_controls mendefinisikan elemen HTML untuk ditempatkan di margin sebelah kanan halaman 

Lihat template default untuk daftar definitif blok yang dapat diganti. Hal ini juga memungkinkan untuk memperpanjang atau mewarisi dari template yang pada gilirannya mewarisi dari template lain (yang mungkin template default). 

2.3.4. Syarat-syarat

.

Kondisi memungkinkan predikasi kode sederhana berdasarkan variabel template, menggunakan markup dari bentuk / * {% jika kondisi pengujian%} * /, diikuti oleh / * {% endif%} * /. Penggunaan utama untuk ini adalah untuk menentukan potongan kode yang harus dieksekusi hanya ketika berjalan di konfigurasi tertentu. Contohnya adalah: 

• / * {% jika tz_development%} * / berarti kode permainan JavaScript disertakan menggunakan tag script memungkinkan untuk debugging mudah. Variabel ini benar maka bendera --mode untuk alat yang digunakan untuk menentukan modus kanvas-debug. 

• / * {% jika% tz_canvas} * / berarti permainan berjalan menggunakan kanvas (non-plugin) versi mesin Turbulenz. Variabel ini benar di kanvas dan kanvas debug mode. 

• / * {% jika tz_hybrid%} * / berarti permainan berjalan menggunakan kedua kanvas (non-plugin) versi mesin Turbulenz dan versi Plugin (tersedia sebagai TurbulenzEngine dan TurbulenzEnginePlugin masing-masing). Variabel ini adalah benar ketika opsi hybrid digunakan. 

Ini dapat digunakan dalam JavaScript, atau kode HTML. 

2.3.5. Variabel 

.

Markup digunakan untuk ekspansi variabel / * {{variabel}} * /. Untuk alat Turbulenz kita mendefinisikan beberapa ekspansi variabel khusus untuk memungkinkan aplikasi yang akan dibangun. 

Untuk kode JavaScript yang kami sediakan adalah sebagai berikut: 

• javascript ini memungkinkan file JavaScript untuk dimasukkan atau direferensikan. Untuk perkembangan membangun, sebuah tag script HTML akan disertakan dengan referensi ke file JavaScript, sedangkan untuk rilis membangun file JavaScript akan inline dalam kode bundel. 

Untuk kode HTML tidak menggunakan template default, kami menyediakan 

• tz_engine_div - memperluas kode HTML membuat tag HTML yang tepat untuk mengatur kanvas atau instantiate plugin browser (tergantung pada modus membangun) 

• tz_include_js - mengembang untuk satu set HTML <script> tag yang mencakup setiap file JS yang diperlukan dalam halaman. 

• tz_startup_code - memperluas kode JavaScript dengan benar dijalankan mesin dan mengeksekusi fungsi theTurbulenzEngine.onload. Variabel ini harus digunakan dalam <script> tag.

2.3.6. Komentar 

.

Komentar markup adalah / * {# komentar #} * / yang hanya memungkinkan komentar untuk ditempatkan ke dalam template yang tidak akan muncul dalam output kode dari alat. (Proses pemadatan di mode rilis menghapus komentar JavaScript).

2.4. Rekomendasi proyek permainan

.

Turbulenz membuat perangkat tidak memaksakan struktur nyata tentang bagaimana sebuah proyek permainan diatur atau dibangun. Namun kami merekomendasikan bahwa pengembang mengikuti panduan yang diberikan di sini. 

2.4.1. Tata Letak Kode

.

Sejak HTML dapat merujuk ke Js file kode (dalam mode pembangunan), file-file js harus berada di direktori di bawah output HTML. Membangun sistem harus baik membangun html, .tzjs dan file js ke akar proyek, atau ke dalam direktori membangun dimana semua file tergantung akan disalin. 

Kami menyarankan membangun output masuk ke akar proyek di mana ia dapat referensi sisa kode game dan aset, dengan struktur direktori berikut di bawah ini. Lihat templateapp untuk contoh. 

script: Main kode permainan dan perpustakaan file.

template: Js permainan dan template html. File Js harus berisi entry point TurbulenzEngine.onload dan kemudian memanggil ke dalam kode di script.

jslib: Salinan direktori jslib dari SDK instalasi.

membangun: Menengah membangun file dan data ketergantungan.

Bila menggunakan kanvas-debug membangun modus, hanya kode minimal dihasilkan dari template akan tertanam ke dalam halaman HTML. Perubahan direktori script tidak akan memerlukan membangun kembali. (Plugin dan kanvas mode akan selalu membutuhkan membangun kembali kode bundel untuk setiap perubahan kode).

2.4.2. Tata Letak aset 

.

Seperti dengan kode, sebaiknya menjaga sumber data aset di subdirektori dari root proyek. 

aset / model: folder aset baku untuk model (sebelum konversi). yaitu .dae, Obj 

aset / tekstur: Folder aset baku tekstur (sebelum konversi). yaitu tga, png, jpg, bmp 

aset / shader: Folder baku aset untuk shader (sebelum konversi). yaitu .cgfx

Folder staticmax harus digunakan untuk output dari membangun aset untuk memaksimalkan efektivitas cache browser, seperti yang dijelaskan dalam Aset bagian. 

Membangun sistem harus mempertahankan file 'mapping_table.json' untuk membantu kode runtime menemukan yang tepat unik bernama file understaticmax. 

2.5. Coding 

.

Berikut adalah beberapa rekomendasi khusus untuk pemrograman JavaScript menggunakan TurbulenzEngine. Pembangunan JavaScript Guidecontains lebih detail dan penjelasan dari beberapa prinsip-prinsip ini, serta pemrograman dan kinerja pedoman JavaScript umum. 

2.5.1. Memberikan waktu kembali ke browser 

.

Banyak operasi yang dilakukan oleh browser terjadi asynchronously, dan perlu untuk memastikan bahwa browser memiliki waktu yang cukup untuk menangani semua operasi ini dan acara. 

Ketika kode JavaScript untuk permainan berjalan, tidak ada kode JavaScript lainnya dapat berjalan pada waktu yang sama. Ini berarti bahwa tugas yang panjang (misalnya mengkonversi format aset pada waktu beban) dapat memperkenalkan penundaan yang signifikan ke area lain dari halaman: 

• UI Browser dan kontrol 

• Tab lainnya berjalan pada browser

• JavaScript berjalan pada halaman yang sama 

• Operasi lainnya JavaScript dilakukan oleh permainan Anda 

Ekuivalen, permainan loop utama harus dijadwalkan akan dipanggil sekali per frame. Sebuah membangun seperti loop sementara tidak akan memberikan browser kesempatan untuk melaksanakan setiap pemuatan atau operasi rendering, dan kemungkinan akan menghasilkan eksekusi peramban menghentikan permainan. 

Kode JavaScript hanya memberikan waktu kembali ke browser setelah semua fungsi telah kembali 

Fungsi setInterval tersedia di objek TurbulenzEngine dapat digunakan untuk menjadwalkan callback dengan cara ini:

var intervalID; function executionLoopFn() { var currentTime = TurbulenzEngine.time;

executionLoopFn akan dipanggil sekali setiap 60 detik. 

Catatan

Fungsi window.setInterval yang disediakan oleh browser umumnya memiliki resolusi terlalu rendah untuk game. TurbulenzEngine.setInterval memanfaatkan API lain atau ekstensi browser untuk memastikan callback terjadi interval yang jauh lebih halus dan lebih akurat.

Namun, karena fakta bahwa waktu eksekusi saham permainan lingkaran dengan operasi lain, adalah mustahil untuk menjamin waktu yang akurat dari callback setiap saat. Properti TurbulenzEngine.time memberikan resolusi tinggi informasi waktu. Permainan dapat menggunakan ini untuk menjaga pembaruan negara permainan dan animasi konsisten dengan harapan pemain. 

Fungsi TurbulenzEngine.setTimeout mirip dengan setInterval, tapi jadwal panggilan balik satu-shot daripada doa diulang. Melewati batas waktu 0 sampai fungsi ini memberikan browser kesempatan untuk menangani operasi lainnya sementara meminta waktu eksekusi lanjut sesegera mungkin. Contoh di bawah agak dibikin, tapi menunjukkan bagaimana hal ini dapat digunakan untuk melakukan perhitungan yang panjang sementara tidak menyebabkan browser untuk membekukan atau menghentikan eksekusi dari permainan. 

var fibCallback = function fibCallbackFn(value) 

Catatan :

Ini cukup ekstrim, pada kenyataannya kita ingin menghitung lebih dari satu Fibonacci istilah untuk setiap loop.

2.5.2. Fungsi caching 

.

Melihat ke atas metode pada objek memiliki biaya yang terkait dengan itu, setara dengan mencari properti lainnya. Waktu yang signifikan sering dapat diselamatkan oleh caching metode bukannya memaksa lookup baru di setiap penggunaan. Misalnya, untuk jumlah array 1.000 vektor implementasi pertama dapat mengambil form ini: 

for (var i = 0; i < 1000; i += 1) 

Dalam melaksanakan setiap langkah loop mesin JavaScript harus cek pertama bagi keberadaan fungsi v3Add pada VMathobject, kemudian mengambil dan memanggil fungsi yang dengan set ini dengan objek VMath. 

Kita bisa menghindari pemeriksaan berulang yang tidak perlu untuk v3Add dengan cara berikut: 

var v3Add = VMath.v3Add; 

2.5.3. Pengetikan Array

.

Pengetikan array memungkinkan kode JavaScript untuk membuat dan buffer akses memori baku, dan menafsirkan data berbagai tipe primitif, asInt32 seperti, Float32, dll (lihat http://www.khronos.org/registry/typedarray/specs/latest/ untuk penuh detail). Banyak mesin JavaScript yang 'sadar' dari array diketik dan dapat menghasilkan dioptimalkan JIT dikompilasi kode untuk beroperasi pada mereka. Untuk alasan ini, kami merekomendasikan penggunaan untuk menyimpan array yang besar dari nilai jenis yang sama. 

Kode bentuk berikut dapat digunakan untuk memeriksa dukungan berbagai diketik 

var ArrayConstructor = Array; 

Data dalam array diketik juga dapat dikirimkan ke beberapa API mesin untuk kinerja yang optimal. Misalnya, ketika pengaturan data pada aVertexBuffer, array diketik menggunakan jenis yang tepat (yaitu pencocokan format vertex) dapat dikirim ke hardware yang memiliki grafis dengan tidak ada jenis konversi, sedangkan Array JavaScript nilai memerlukan mesin untuk iterate melalui array dalam mengkonversi nilai ganda ke format yang sesuai. Lihat The IndexBuffer Obyek, The VertexBuffer Obyek dan The Tekstur Obyek untuk rincian format data yang optimal.

Turbulenz MathDevice membuat ekstensif menggunakan jenis Float32Array untuk vektor dan matriks benda. 

Tidak ada komentar:

Posting Komentar