Advertisement
  1. Game Development
  2. Game Design

Membungum Stage3D Shoot-Em-Up:Medan, Musuh Al, dan Level Data

Scroll to top
Read Time: 46 min
This post is part of a series called Shoot-'Em-Up.
Quick Tip: A Simple Score Display for Flash Games
Animating Game Menus and Screen Transitions in HTML5: A Guide for Flash Developers

Indonesian (Bahasa Indonesia) translation by Suci Rohini (you can also view the original English article)

Kita sedang membuat shoot-em-up 2D berkinerja tinggi menggunakan mesin rendering Stage3D percepatan perangkat keras Flash yang baru. Di bagian seri ini kita menambahkan mode pergerakan musuh baru, musuh yang menembak balik, dan level kerajinan tangan dengan medan background.


Juga tersedia dalam seri ini:

  1. Membangun Stage3D Shoot-’Em-Up: Tes Sprite
  2. Buat Stage3D Shoot-’Em-Up: Interaksi
  3. Membangun Stage3D Shoot-’Em-Up: Explosions, Parallax, dan Collisions
  4. Membangun Stage3D Shoot-'Em-Up: Terrain, Enemy AI, dan Level Data
  5. Membangun Stage3D Shoot-’Em-Up: Score, Health, Lives, HUD dan Transitions
  6. Membangun Stage3D Shoot-’Em-Up: Battles Boss Layar Penuh dan Polish

Pratinjau Hasil Akhir

Mari kita lihat hasil akhir yang akan kita upayakan: demo tembak-em-up yang dipercepat perangkat keras yang mencakup semuanya dari bagian satu hingga tiga dari seri ini, ditambah mode pergerakan musuh baru, musuh yang menembak balik, dan hand- tingkat buatan yang mencakup medan background.


Pendahuluan: Selamat Datang di Level Empat!

Mari kita terus membuat side-scrolling shooter yang terinspirasi oleh judul arcade retro seperti R-Type atau Gradius di AS3.

Pada bagian pertama dari seri ini, kami menerapkan mesin sprite 2D dasar yang mencapai kinerja luar biasa melalui penggunaan perenderan hardware Stage3D dan beberapa optimasi.

Pada bagian pertama, kita menerapkan layar judul, menu utama, suara dan musik, dan sistem input sehingga pemain dapat mengontrol pesawat ruang angkasa mereka menggunakan keyboard.

Dan di bagian ketiga, kita menambahkan semua eye-candy: sistem partikel lengkap dengan bunga api, puing-puing terbang, gelombang kejut, jalur api mesin dan berton-ton ledakan.

Pada bagian ini, kita akan meningkatkan beberapa komponen utama dari mesin permainan kita. Pertama, kita akan menambahkan A.I. (Kecerdasan buatan) untuk musuh kita dengan menciptakan beberapa perilaku dan gaya gerakan yang berbeda. Mereka akhirnya akan mulai menembak balik, dan tidak akan lagi hanya bergerak dalam garis lurus. Beberapa bahkan tidak akan bergerak sama sekali, tetapi akan menunjuk pada pemain: sempurna untuk senjata penjaga.

Kedua, kita akan menerapkan mekanisme parsing data level yang akan memberdayakan Anda untuk merancang dunia game yang luas menggunakan editor level.

Ketiga, kita akan membuat kumpulan spritesheet dan rendering baru untuk set sprite terain non-interaktif yang akan digunakan sebagai bagian dari background. Dengan cara ini, kita akan terbang di atas stasiun ruang angkasa dan asteroid terperinci, bukan hanya ruang kosong.


Langkah 1: Buka Proyek Anda Yang Ada

Kita akan membangun kode sumber yang ditulis dalam tutorial sebelumnya, yang kebanyakan tidak akan berubah. Jika Anda belum memilikinya, pastikan untuk mengunduh kode sumber dari tutorial sebelumnya. Buka file proyek di FlashDevelop (info di sini) dan bersiaplah untuk meningkatkan game Anda! Kode sumber ini akan berfungsi di kompiler AS3 lainnya, dari CS6 ke Flash Builder.


Langkah 2: Tingkatkan Kelas Entitas

Kita pertama-tama akan mengimplementasikan beberapa AI pergerakan baru ke kelas entitas. Untuk fungsionalitas ini, kita akan memerlukan beberapa data status lainnya untuk dilacak untuk setiap entitas. Khususnya kita akan memerlukan beberapa informasi jalur, dan berbagai timer yang akan memberi tahu kita seberapa sering musuh perlu menembaki pemain. Buka file Entity.as yang ada dari terakhir kali dan tambahkan variabel kelas baru berikut sebagai berikut. Untuk menghindari kebingungan, seluruh bagian atas file disertakan di sini tetapi hanya variabel AI di atas yang baru.


Langkah 3: Jangan Langsung Tembak

Kita akan melacak waktu yang telah berlalu sejak musuh menembak pemain sehingga orang jahat tidak terlalu sering menembak. Kita juga perlu musuh untuk mengingat agar tidak menembak langsung saat mereka pertama kali lahir, jadi kita perlu menambahkan sedikit waktu acak sebelum mereka mulai menembak.

Melanjutkan dengan Entity.as, perbarui fungsi konstruktor kelas sebagai berikut, dan cukup catat fungsi pengambil dan penyetel yang tidak berubah serta kode deteksi tabrakan yang identik dari waktu lalu.


Langkah 4: Gerakan Kurva Spline

Salah satu mode AI baru akan menjadi lintasan gerakan acak yang melengkung. Algoritma hebat yang digunakan dalam banyak gim adalah kurva spline Catmull-Rom klasik, yang mengambil berbagai titik dan menyisipkan jalur yang mulus di antara semuanya. Jalur ini akan berputar di ujung jika perlu.

Rutin baru pertama yang dibutuhkan untuk kelas entitas kita adalah fungsi perhitungan spline. Dibutuhkan tiga poin dan "persentase" angka t yang harus berubah dari nol menjadi satu dari waktu ke waktu. Saat t mendekati 1, titik yang dikembalikan akan berada di bagian paling ujung dari kurva, dan sebaliknya jika nol, titik yang dikembalikan adalah posisi awal spline.

Untuk demo permainan saat ini, kita hanya akan menghasilkan banyak poin acak untuk setiap entitas baru yang menggunakan momen seperti ini, tetapi Anda dapat dengan mudah menambahkan jalur yang telah Anda tentukan sendiri untuk semua jenis pola pergerakan musuh yang menarik, dari sebuah gambar delapan ke pola zig-zag sederhana.

Anda dapat membaca lebih lanjut tentang kurva spline Catmull-Rom di AS3 dengan memeriksa demo ini dan tutorial ini.


Langkah 5: Tentukan Kapan Memotret

Setiap tipe musuh perlu menembak pemain (kecuali untuk asteroid non-penembakan yang hanya akan berputar dan melayang di angkasa). Untuk saat ini, kita hanya akan melacak waktu yang telah berlalu sejak kita terakhir menembakkan senjata dan menambahkan jarak acak beberapa detik di antara tembakan.

Anda dapat menambahkan lebih banyak kecerdasan untuk rutin ini dengan hanya menembak ketika pemain berada dalam jarak tertentu, atau hanya menembak sekali dan merusak diri sendiri jika permainan Anda memerlukan semacam efek "bom waktu".


Langkah 6: AI #1: Bergerak dalam Garis Lurus

Fungsi "otak" AI pertama yang akan diimplementasikan adalah yang paling sederhana: gerakan langsung sepanjang garis seperti yang terlihat dalam tutorial minggu lalu. Semua yang kita lakukan di sini adalah titik ke arah saat ini dan bergerak di lintasan apa pun yang secara acak ditugaskan kepada kita ketika kita pertama kali melahirkan. Tidak ada apa-apa!


Langkah 7: AI #2: Getaran Sinusoidal

Salah satu pola gerakan yang paling umum dalam setiap shoot-em-up adalah gerakan "gelombang" sinusoidal. Kita akan menggunakan gelombang sinus yang akan bergetar naik dan turun seiring waktu ketika musuh bergerak dalam garis yang sebagian besar lurus ke arah pemain. Pola ini benar-benar terlihat bagus dan menambahkan beberapa gerakan menyenangkan bagi musuh-musuh Anda tanpa terlalu banyak kekacauan, yang membuat musuh-musuh seperti ini mudah diarahkan dan dihancurkan.


Langkah 8: AI #3: Sentry Guns

Gaya AI musuh lain yang sangat berguna dan umum yang digunakan oleh sebagian besar penembak adalah "penjaga senjata" yang tidak bergerak atau menara. Musuh semacam ini hanya akan duduk di sana dan membidik pemain. Ini bisa menakutkan bagi para pemain untuk melihat senjata penjaga mengikuti setiap gerakan mereka dan pasti akan mendapatkan beberapa manuver menghindar.

Karena kita memerlukan akses ke posisi entitas pemain, kita melakukan pemeriksaan cepat untuk memastikannya ada karena fungsi AI mungkin dijalankan selama menu utama "attract mode" sebelum ada pemain yang membidik.


Langkah 9: AI #4: Jalur Spline

Gaya akhir pergerakan AI akan menggunakan rutin interpolasi kurva spline Catmull-Rom yang telah diprogramkan di atas. Musuh jenis ini akan goyah dan berputar-putar dengan cara yang choatic, frustasi. Yang terbaik adalah hanya menyertakan beberapa musuh jenis ini di gim Anda, kecuali jika Anda telah meningkatkan fungsi generatePath untuk menggunakan array poin yang dimasukkan secara manual yang tidak begitu acak.

Agar semuanya terlihat lebih bagus, begitu kita mengetahui koordinat baru untuk musuh kita, kita mengorientasikan sprite untuk menghadapi arah pergerakannya, sehingga ia berputar saat ia berputar.

Itu saja untuk kelas entitas kita yang baru saja ditingkatkan. Kita telah menambahkan beberapa kode pergerakan baru dan akhirnya armada besar kapal musuh mampu membalas pemain!


Langkah 10: Spritesheet Medan

Sebelum kita melanjutkan, kita akan membuat spritesheet baru untuk digunakan sebagai blok bangunan untuk grafik medan kita. Kita lagi akan menggunakan seni "Tyrian" yang indah, legal dan gratis oleh Daniel Cook (tersedia di Lostgarden.com). Sebelum melanjutkan, kita akan membuat spritesheet baru untuk digunakan sebagai blok bangunan untuk grafik medan kita. Kita lagi akan menggunakan seni "Tyrian" yang indah, legal dan gratis oleh Daniel Cook (tersedia di Lostgarden.com).



Langkah 11: Level Editor Waktu!

a Untuk melakukannya, kita akan membuat kelas sederhana yang mem-parsing output data oleh editor tingkat sumber terbuka populer yang disebut OGMO. Anda dapat membaca semua tentang OGMO di sini.

Anda tidak harus menggunakan OGMO: Anda dapat memodifikasi rutinitas ini untuk mem-parsing XML sebagai output oleh "Tile" atau "DAME", atau file .CSV sebagai output oleh Excel, atau bahkan .GIF atau .PNG sebagai output oleh Photoshop (dengan menggambar masing-masing piksel dan memunculkan berbagai jenis musuh tergantung pada warna masing-masing piksel).

Rutin parsing untuk semua jenis data level adalah sepele dibandingkan dengan fungsionalitas dalam game. Untuk kesederhanaan dan ukuran unduhan yang kecil, CSV (nilai yang dipisahkan koma) adalah alternatif yang bagus untuk XML yang kembung dan kompleks. Lebih penting lagi, sifat linear dari shoot-em-up kita memerlukan serangkaian data panjang yang meyakinkan untuk dapat mengakses kolom demi kolom dan baris demi baris, sebagai lawan dari "sup" entitas XML yang bisa dalam urutan apa pun. CSV membuat data mengalir dari kiri ke kanan, sama seperti game. Karena OGMO dapat menyimpan data dalam format ini, itu sangat cocok.

Unduh penginstal dan secara opsional kode sumber. Setelah Anda menginstalnya, buat dua proyek baru - satu untuk medan dan satu untuk sprite musuh. Pastikan bahwa data level Anda akan disimpan dalam format "CSV terpangkas" yang ringkas dan sederhana.

Pastikan untuk menyimpan dalam format CSV

Untuk proyek terrain, kita perlu membuat layer untuk terrain yang menggunakan spritesheet photoshopped kita yang baru di atas.


Sekarang, simpy gambar peta sesuka Anda. Anda dapat mengklik setiap sprite di spritesheet Anda di palet ubin dan mereka menggambar atau mengisi level Anda sesuai keinginan Anda. Klik kanan tingkat untuk menghapus ubin itu, dan tahan ruang sambil mengklik dan menarik untuk menggulir sekitar.


Sekarang lakukan hal yang sama untuk sprite musuh Anda. Buat layer yang menggunakan spritesheet yang dibuat di tutorial sebelumnya sebagai berikut:


Akhirnya, isi level Anda dengan segala macam skuadron kapal musuh yang menarik sesuai keinginan Anda. Untuk demo saat ini, saya mulai dengan hanya beberapa penjahat dan benar-benar mengisi setiap ruang dengan asteroid menjelang akhir level.


File sumber OMGO untuk level yang digunakan dalam game demo termasuk dalam folder /assets/ dari file zip kode sumber.


Langkah 10: Sematkan Data Level

Kita hanya akan menanamkan level ke SWF sehingga terus menjadi game mandiri yang tidak memerlukan file eksternal untuk diunduh. Anda dapat memiliki editor level terbuka saat memprogram game Anda. Setiap kali Anda mengubah level Anda, simpan saja dan klik tombol RUN FlashDevelop untuk melihat perubahan yang terjadi. Ini akan melihat cap waktu baru pada file level Anda dan mengkompilasi ulang SWF yang sesuai.

Bergantung pada level mana yang diminta, kita mengisi array dua dimensi dari nilai integer berdasarkan pada output level data oleh editor. Selama bermain game, manajer entitas kami akan secara berkala menelurkan kolom sprite medan atau musuh lain berdasarkan data ini. Buat file baru dalam proyek kode Anda yang disebut GameLevels.as dan embed data level sebagai berikut.


Langkah 11: Mengurai Data Level

Kelas parsing data level baru kita akan menjadi sangat sederhana: kita cukup menghapus semua XML yang berlebihan dan melahap data .CSV dengan memecah setiap baris dengan koma. Ini sudah cukup untuk tujuan kita.

Lanjutkan dengan GameLevels.as dan terapkan fungsi parsing data level sebagai berikut:

Itu saja untuk kelas parsing level kita. Meskipun sederhana, ini membutuhkan ruang yang sangat sedikit di SWF kita, berjalan cukup cepat, dan memungkinkan untuk melakukan iterasi desain level dengan mudah dengan membuka FlashDevelop dan OGMO pada saat yang bersamaan. Hanya dua klik yang diperlukan untuk mencoba versi baru level Anda, yang berarti bahwa siklus desain-pengujian-pengulangan hanyalah beberapa detik.

Hanya untuk bersenang-senang, berikut adalah beberapa tangkapan layar dari gaya level yang akan dapat dimainkan di game:






Langkah 12: Tingkatkan Entity Manager

Kita perlu memanfaatkan mode pergerakan AI baru yang keren ini dan sistem medan baru yang mengagumkan yang baru saja dibuat. Ini akan membutuhkan beberapa perubahan kecil ke file EntityManager.as dari terakhir kali. Untuk menghindari kebingungan, seluruh kelas disajikan di sini, tetapi hanya beberapa baris di sana-sini telah berubah.

Secara khusus, alih-alih memaksa manajer entitas untuk menggunakan gambar spritesheet tertentu, kami akan membiarkannya didefinisikan oleh Main.as sehingga kita dapat memiliki lebih dari satu. Ini karena kita sekarang memiliki musuh dan manajer entitas medan yang berjalan bersamaan.

Perubahan kecil lainnya termasuk jarak pemusnahan yang lebih besar (tepi luar dunia game tempat sprite yang melampaui itu didaur ulang untuk digunakan kembali dalam kumpulan sprite), ditambah berbagai variabel kelas baru yang diperlukan untuk parsing data level secara rutin.

Mulailah dengan memutakhirkan semua variabel kelas di bagian atas file sebagai berikut:


Langkah 13: Tingkatkan Init

Kita perlu memutakhirkan konstruktor kelas manajer entitas untuk membuat turunan dari kelas parser data tingkat permainan yang ditulis di atas. Selain itu, kita ingin menyimpan titik tengah layar untuk digunakan sebagai posisi awal bermain dan memperluas lokasi sprite minimum dan maksimum setiap kali game diubah ukurannya. Melanjutkan dengan EntityManager.as, tingkatkan yang berikut ini.


Langkah 14: Akun untuk Padding UV

Ada satu penyesuaian khusus yang diperlukan untuk fungsi createBatch kita. Ternyata spritesheet medan, yang menggunakan sprite ubin yang bersebelahan satu sama lain dan tidak menyertakan ruang kosong di antara ubin, dapat menghasilkan gangguan visual pada game kita jika digunakan apa adanya. Ini karena cara GPU kartu video Anda mencicipi setiap tekstur dalam kumpulan sprite ketika membuat semua sprite. Berikut adalah contoh medan yang kami buat menggunakan rutinitas dari minggu lalu:


Apa yang terjadi dalam contoh #1 adalah bahwa piksel tepi ubin dapat "berdarah" ke ubin sebelah karena interpolasi bilinear dari nilai-nilai RGB. Untuk memperhitungkan hal ini, kita perlu mengizinkan nilai offset tekstur kecil (UV), yang akan "memperbesar" setiap ubin hanya dengan jumlah yang sangat kecil. Tanpa perubahan ini, game akan memiliki artefak seperti yang terlihat di atas.


Langkah 15: Rutinitas Pemijahan

Rutinitas berikut hampir identik dengan minggu lalu terlepas dari penggunaan nilai titik tengah dalam pemijahan pemain dan beberapa perbedaan ukuran. Mereka termasuk di sini untuk kelengkapan.

Akhirnya, fungsi addRandomEntity seperti didefinisikan di bawah adalah apa yang di versi sebelumnya adalah fungsi addEntities. Ini tidak digunakan dalam demo ini dan dapat dihapus, karena kita mengubah permainan kita untuk tidak lagi menggunakan musuh yang muncul secara acak dan alih-alih beralih ke level kerajinan tangan. Fungsi ini mungkin berguna dalam pengujian Anda untuk memperhitungkan waktu ketika tidak ada data level yang tersisa. Anda cukup menyalin dan menempelkan kode ini di atas rutinitas asli Anda dan melanjutkan tanpa melihat lebih dalam.


Langkah 16: Tingkatkan Lingkaran Render

Fungsi update() dijalankan setiap frame tunggal, seperti sebelumnya. Beberapa modifikasi telah dibuat untuk memperhitungkan fungsionalitas AI musuh baru yang ditambahkan ke kelas entitas di atas, serta fungsi parsing data level baru kita.

Misalnya, minggu lalu kita hanya menjalankan langkah pembaruan simulasi entitas jika tidak ada aiFunction yang didefinisikan. Sekarang, kita akan memanggil fungsi ini di hampir setiap entitas game yang bergerak, jadi kita menjalankannya dan kemudian melanjutkan dengan animasi standar dengan memeriksa kecepatan berbagai parameter entitas. Kita dulu hanya memeriksa tabrakan dengan peluru, tetapi sekarang kapal musuh dapat bertabrakan dengan pemain juga.

Melanjutkan dengan EntityManager.as, terapkan perubahan ini sebagai berikut.


Langkah 17: Beralih Level

Fungsi yang tersisa di EntityManager.as adalah merek baru. Kita membutuhkan mekanisme untuk secara instan menghancurkan semua entitas yang dikenal di seluruh dunia game. Ini akan terjadi setiap kali pemain naik ke level berikutnya. Ini juga terjadi segera ketika permainan meninggalkan mode tarik "menu utama" sehingga sprite yang ada di sana tidak mencemari dunia permainan pemain yang sebenarnya. Saat game dimulai, kita juga akan mengurai set data level berikutnya.


Langkah 18: Streaming Tingkat

Fungsi akhir yang perlu kita tambahkan ke manajer entitas kita adalah yang menumbuhkan entitas baru berdasarkan data level. Ini mengukur jarak yang telah kita tempuh, dan ketika set petak level berikutnya diharuskan, ia memunculkan kolom entitas lain seperti yang ditentukan oleh data level. Jika manajer entitas yang menjalankan rutin ini bertanggung jawab atas medan, tidak ada lagi yang perlu dilakukan, tetapi jika kita memunculkan kapal musuh, asteroid, dan senjata penjaga, kita perlu memutuskan jenis AI rutin apa yang diberikan untuk setiap entitas.

Salah satu pertimbangan penting berkaitan dengan gangguan medan seperti yang diilustrasikan dalam gambar di atas yang menunjukkan "jahitan" di antara ubin.


Dalam beberapa versi pertama dari fungsi ini, kita hanya mengukur jarak yang ditempuh berdasarkan waktu yang berlalu setiap frame dan menambah variabel penghitung, memunculkan baris ubin berikutnya jika diperlukan. Masalah dengan pendekatan ini adalah bahwa angka floating point (apa pun dengan titik desimal) tidak 100% akurat. Karena kita hanya dapat menyimpan begitu banyak informasi dalam jenis Number, beberapa jumlah yang sangat kecil dibulatkan.

Ini tidak terlihat dalam sebagian besar situasi, tetapi seiring waktu sedikit perbedaan bertambah sampai akhirnya ubin medan dimatikan oleh piksel. Oleh karena itu, kita melacak petak medan kolom sebelumnya dan memaksa yang berikutnya tepat jarak yang tepat darinya. Kita tidak bisa berasumsi bahwa medan telah menggulir tepat 48 piksel sejak terakhir kali kita menghasilkan ubin. Mungkin telah memindahkan 48.00000000001 piksel.

Anda dapat membaca lebih lanjut tentang banyak masalah yang dapat diakumulasikan oleh floating-point di game dalam artikel yang sangat menarik ini.


Langkah 19: Berikan Otak Musuh

Melanjutkan fungsi streamLevelEntities, kita hanya perlu memilih AI jenis apa yang akan digunakan untuk setiap musuh yang baru dilahirkan (jika ada). Untuk referensi, ini adalah spritesheet yang digunakan:


Spritesheet musuh telah dibagi menjadi baris. Baris pertama dari sprite hanya bergerak ke depan dalam garis lurus pada sudut acak. Baris kedua menggunakan gerakan baru dibuat sinusoidal "gelombang seperti" kita ponting yang dalam garis lurus. Kita menjelaskan dua ubin penjaga senjata dan tiga gambar asteroid sebagai kasus khusus. Baris berikutnya bergerak pada sudut acak dengan goyangan, dan akhirnya, semua sprite yang tersisa akan menggunakan gerakan kurva spline Catmull-Rom acak kita.

Itu saja untuk kelas manajer entitas kita yang baru saja ditingkatkan. Sekarang mengambil keuntungan dari medan "streaming", memberikan musuh AI yang tepat, dan tidak lagi hanya memunculkan arus penjahat tak terbatas acak.


Langkah 20: Akun untuk Padding UV

Dalam peningkatan di atas, kita menghindari gangguan grafis kecil dengan memperhitungkan dua hal: ketidaksesuaian floating-point dan interpolasi sampling tekstur, yang menyebabkan pendarahan piksel tepi ke ubin medan yang berdekatan. Yang terakhir mengharuskan kita "memperbesar" ubin medan sedikit demi sedikit agar tepinya terlihat benar. Kita perlu meningkatkan kelas LiteSpriteSheet.as yang ada untuk memperhitungkan offset kecil ini saat membuat semua koordinat tekstur UV untuk setiap sprite.

Seperti yang Anda lihat, satu-satunya perubahan di atas terkait dengan parameter uvPadding di konstruktor kelas untuk setiap spritesheet.


Langkah 21: Peningkatan Terakhir!

Kita hampir selesai! Yang perlu dilakukan sekarang adalah memutakhirkan Main.as yang ada dalam proyek kita untuk memperhitungkan berbagai perubahan kecil pada cara kita membuat contoh baru dari manajer entitas kita dan spritesheets mereka. Perubahan pada file ini sepele, tetapi termasuk di sini secara penuh untuk menghindari kebingungan.

Perbedaan utama termasuk fakta bahwa kita sekarang menanamkan dua spritesheet utama di sini daripada di manajer entitas, penambahan lapisan medan, berurusan dengan dua kecepatan gulir yang berbeda (karena kita ingin medan bergerak lebih lambat daripada musuh di foreground, dan memicu level baru untuk dimuat.

Dilakukan! Kompilasi proyek Anda, perbaiki salah ketik, dan jalankan game. Jika Anda mengalami masalah dengan kode yang Anda ketikkan atau hanya ingin kepuasan instan dari segala sesuatu di satu tempat, ingatlah bahwa Anda dapat mengunduh kode sumber lengkap di sini.

Berikut adalah beberapa tips untuk jika Anda mengalami masalah:

  • Jika Anda menggunakan FlashBuilder, pastikan untuk memasukkan "-default-frame-rate 60" di opsi kompiler Anda untuk memastikan Anda mendapatkan kinerja terbaik.
  • Jika Anda menggunakan Linux atau Mac, Anda dapat mengompilasinya dari command-line (atau dalam makefile) menggunakan sesuatu yang mirip dengan "mxmlc-load-config+=obj\shmup_tutorial_part4Config.xml-swf-version=13", tergantung pada lingkungan kerja Anda.
  • Ingatlah bahwa karena kita menggunakan Flash 11, Anda harus mengkompilasi menggunakan versi terbaru dari kompiler Flex dan playerglobal.swc.
  • Yang terpenting, ingat bahwa HTML embed Flash Anda harus menyertakan "wmode=direct" untuk mengaktifkan Stage3D.

Sumber ini hanya diuji menggunakan FlashDevelop di Windows, dan tips di atas telah diajukan oleh sesama pembaca Anda.

Setelah semuanya mengkompilasi dan berjalan dengan benar, Anda akan melihat sesuatu yang terlihat seperti ini: permainan tembak-menembak Stage3d aksi cepat lengkap dengan medan bergulir paralaks, berton-ton musuh untuk dihancurkan, suara, musik dan - yang tak kalah pentingnya - yang halus -mengisi 60 frame per framerate detik!



Bagian Empat Lengkap: Persiapkan untuk Level Lima!

Itu saja untuk tutorial nomor empat dalam seri ini. Kita sekarang dapat membanggakan dunia game yang terperinci, musuh dengan beberapa variasi, dan kemampuan untuk menggunakan editor level. Kita sedang dalam perjalanan menuju produk akhir!

Dalam tutorial berikutnya, kita akan meningkatkan kemampuan menembak baru yang mengagumkan ke akun untuk kesehatan dan skor pemain. Kita juga akan menambahkan konsep "live" sehingga Anda bisa mendapatkan kondisi "permainan berakhir" atau "kredit akhir". Kita akan menambahkan transisi untuk memberikan pemain jeda antar level, dan kita akan memungkinkan pengguna untuk melanjutkan di mana mereka tinggalkan. Alih-alih demo tanpa batas di mana Anda tidak bisa mati, proyek kita akhirnya akan menjadi permainan yang sepenuhnya dapat dimainkan yang benar-benar menimbulkan tantangan bagi pemain. Kita akan mencoba mengukur kesulitan dengan tepat sehingga mulai mudah dan semakin sulit saat Anda melanjutkan.

Setelah minggu depan, tutorial terakhir, nomor enam, adalah tentang menambahkan polesan akhir, ditambah pembuatan BOSS BATTLE epik! Ini akan menjadi menyenangkan!

Saya ingin sekali mendengar dari Anda tentang tutorial ini. Saya dengan hangat menyambut semua pembaca untuk menghubungi saya melalui twitter: @McFunkypants, blog saya mcfunkypants.com atau di google+ kapan saja. Secara khusus, saya ingin melihat permainan yang Anda buat menggunakan kode ini dan saya selalu mencari topik baru untuk menulis tutorial di masa depan. Hubungi saya kapan saja.

Jika Anda telah menikmati tutorial ini sejauh ini, mungkin Anda ingin mempelajari lebih lanjut tentang Stage3D? Jika demikian, mengapa tidak membeli buku Stage3d saya!

Semoga Berhasil dan BERSENANG-SENANGLAH!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Game Development tutorials. Never miss out on learning about the next big thing.
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.