7 days of WordPress themes, graphics & videos - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Game Development
  2. Programming

Membuat Shooter Vektor Neon di XNA: Basic Gameplay

Read Time: 10 mins
This post is part of a series called Cross-Platform Vector Shooter: XNA.
Make a Neon Vector Shooter in XNA: More Gameplay

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

Dalam seri tutorial ini, saya akan menunjukkan cara membuat tongkat shooter neon twin seperti Geometri Wars, yang akan kita sebut Shape Blaster, di XNA. Tujuan dari tutorial ini bukan untuk meninggalkan Anda dengan replika Perang Geometri yang sama persis, melainkan untuk membahas elemen-elemen penting yang memungkinkan Anda membuat varian berkualitas tinggi sendiri.

Saya menganjurkan Anda untuk memperluas dan bereksperimen dengan kode yang diberikan dalam tutorial ini. Kita akan membahas topik ini di seluruh seri:

  1. Siapkan basic gameplay, membuat player's ship dan menangani input, suara, dan musik.
  2. Selesaikan penerapan mekanika permainan dengan menambahkan musuh, menangani deteksi tabrakan, dan melacak skor pemain dan nyawa.
  3. Tambahkan filter bloom, yang merupakan efek untuk memberikan grafis cahaya neon.
  4. Tambahkan efek partikel over-the-top yang gila.
  5. Tambahkan grid background warping.

Inilah yang akan kita punya pada akhir seri:

Dan inilah yang akan kita punya di akhir bagian pertama:

Musik dan efek suara yang dapat Anda dengar dalam video ini dibuat oleh RetroModular, dan Anda dapat membaca tentang bagaimana ia melakukannya di Audiotuts+.

Sprite oleh Jacob Zinman-Jeanes, penghuni desainer Tuts+. Semua karya seni dapat ditemukan di zip file source download.

Shape_Blaster_SpritesShape_Blaster_SpritesShape_Blaster_Sprites
Font oleh Nova Square, oleh Wojciech Kalinowski.

Mari kita mulai.


Overview

Dalam tutorial ini kita akan membuat penembak kembar-tongkat; pemain akan mengontrol kapal dengan keyboard, keyboard dan mouse, atau dua thumbstick dari gamepad.

Kita menggunakan sejumlah kelas untuk mencapai ini:

  • Entity: Kelas dasar untuk musuh, peluru, dan kapal pemain. Entitas dapat bergerak dan ditarik.
  • Bullet dan PlayerShip.
  • EntityManager: Melacak semua entitas dalam game dan melakukan deteksi tabrakan.
  • Input: Membantu mengelola input dari keyboard, mouse, dan gamepad.
  • Art: Memuat dan menyimpan referensi ke tekstur yang dibutuhkan untuk game.
  • Sound: Memuat dan menyimpan referensi ke suara dan musik.
  • MathUtil dan Extensions: Berisi beberapa metode statis dan metode ekstensi yang membantu.
  • GameRoot: Mengontrol putaran utama game. Merupakan game1 kelas XNA yang secara otomatis menghasilkan, diganti namanya.

Kode dalam tutorial ini bertujuan untuk menjadi sederhana dan mudah dimengerti. Tidak akan memiliki setiap fitur atau arsitektur rumit yang dirancang untuk mendukung setiap kebutuhan yang mungkin. Sebaliknya, ia hanya akan melakukan apa yang perlu dilakukan. Menjaga agar tetap sederhana akan mempermudah Anda untuk memahami konsep, dan kemudian memodifikasi dan memperluasnya ke dalam permainan unik Anda sendiri.


Entities dan Player's Ship

Buat proyek XNA baru. Ubah nama kelas Game1 menjadi sesuatu yang lebih cocok. Saya menyebutnya GameRoot.

Sekarang mari kita mulai dengan membuat base class untuk entitas permainannya.

Semua entitas kita (musuh, bullets dan player's ship) memiliki beberapa properti dasar seperti gambar dan posisi. IsExpired akan digunakan untuk menunjukkan bahwa entitas telah dihancurkan dan harus dihapus dari daftar yang memegang referensi untuk itu.

Selanjutnya kita membuat EntityManager untuk melacak entitas kita dan untuk memperbarui dan menarik mereka.

Ingat, jika Anda mengubah daftar saat melakukan iterasi di atasnya, Anda akan mendapatkan pengecualian. Kode di atas menangani ini dengan mengantre setiap entitas yang ditambahkan selama memperbarui dalam daftar terpisah, dan menambahkannya setelah selesai memperbarui entitas yang ada.

Membuat Mereka Terlihat

Kita perlu memuat beberapa tekstur jika ingin menggambar apa pun. Kita akan membuat kelas statis untuk menyimpan referensi ke semua tekstur.

Muat seni dengan memanggil Art.Load(Conten) di GameRoot.LoadContent(). Selain itu, sejumlah kelas perlu mengetahui dimensi layar, jadi tambahkan properti berikut ke GameRoot:

Dan dalam konstruktor GameRoot, tambahkan:

Sekarang kita akan mulai menulis kelas PlayerShip.

Kita membuat PlayerShip menjadi tunggal, mengatur citranya, dan menempatkannya di tengah layar.

Akhirnya, mari tambahkan kapal pemain ke EntityManager dan perbarui dan gambarkan. Tambahkan kode berikut di GameRoot:

Kita menggambar sprite dengan aditif blending, yang merupakan bagian dari apa yang akan memberi mereka tampilan neon mereka. Jika Anda menjalankan permainan pada titik ini Anda harus melihat kapal Anda di tengah layar. Namun, itu belum menanggapi masukan. Mari perbaiki itu.


Input

Untuk gerakan, pemain dapat menggunakan WASD pada keyboard, atau thumbstick kiri pada gamepad. Untuk membidik, mereka dapat menggunakan tombol panah, thumbstick kanan, atau mouse. Kita  tidak akan mengharuskan pemain untuk menahan tombol mouse untuk menembak karena tidak nyaman untuk terus menekan tombol. Ini memberi kita sedikit masalah: bagaimana kita tahu apakah pemain bertujuan dengan mouse, keyboard, atau gamepad?

Kita akan menggunakan sistem berikut: kita akan menambahkan input keyboard dan gamepad bersama. Jika pemain menggerakkan mouse, kita beralih ke tujuan mouse. Jika pemain menekan tombol panah atau menggunakan thumbstick kanan, kita matikan mouse.

Satu hal yang perlu diperhatikan: mendorong maju thumbstick akan mengembalikan nilai y positif. Dalam koordinat layar, nilai y meningkat ke bawah. Kita ingin membalikkan sumbu y pada pengontrol sehingga mendorong thumbstick ke atas akan mengarahkan atau memindahkan kita ke bagian atas layar.

Kita akan membuat kelas statis untuk melacak berbagai perangkat input dan berhati-hati berpindah antar berbagai jenis penargetan.

Panggilan Input.Update() di awal GameRoot.Update() agar kelas input bekerja.

Tip: Anda mungkin memperhatikan saya memasukkan metode untuk bom. Kita tidak akan menerapkan bom sekarang tetapi metode itu ada untuk digunakan di masa depan.

Anda mungkin juga memperhatikan di GetMovementDirection() saya menulis direction.LenghtSquared () > 1. Menggunakan LengthSquared() merupakan optimalisasi kinerja kecil; menghitung kuadrat panjangnya sedikit lebih cepat daripada menghitung panjangnya sendiri karena menghindari operasi akar kuadrat yang relatif lambat. Anda akan melihat kode menggunakan kuadrat panjang atau jarak di seluruh program. Dalam kasus khusus ini, perbedaan kinerja dapat diabaikan, tetapi optimalisasi ini dapat membuat perbedaan ketika digunakan dalam loop yang ketat.

Gerakan

Kita sekarang siap untuk membuat kapal bergerak. Tambahkan kode ini ke metode PlayerShip.Update():

Ini akan membuat kapal bergerak dengan kecepatan hingga delapan piksel per frame, menjepit posisinya sehingga tidak bisa keluar layar, dan memutar kapal untuk menghadap ke arah pergerakannya.

ToAngle() adalah metode ekstensi sederhana yang didefinisikan dalam kelas Ekstensions seperti:

Menembak

Jika Anda menjalankan permainan sekarang, Anda harus dapat menerbangkan kapal. Sekarang mari kita buat itu menembak.

Pertama, kita butuh kelas untuk peluru.

Kita ingin periode cooldown singkat antara peluru, jadi tambahkan bidang berikut ke kelas PlayerShip.

Juga, tambahkan kode berikut untuk PlayerShip.Update().

Kode ini menciptakan dua peluru yang berjalan sejajar satu sama lain. Ini menambah sedikit keacakan ke arah. Ini membuat bidikan menyebar sedikit seperti senapan mesin. Kita menambahkan dua nomor acak bersama-sama karena ini membuat jumlah mereka lebih mungkin untuk berpusat (sekitar nol) dan cenderung mengirim peluru jauh. Kita menggunakan quaternion untuk memutar posisi awal peluru ke arah yang mereka lalui.

Kita juga menggunakan dua metode pembantu baru:

  • Random.NextFloat() mengembalikan float antara nilai minimum dan maksimum.
  • MathUtil.FromPolar() menciptakan Vector2 dari sudut dan besarnya.

Kursor Kustom

Ada satu hal lagi yang harus kita lakukan sekarang karena kita memiliki kelas Input. Mari menggambar kursor mouse khusus untuk mempermudah melihat ke mana tujuan kapal. Di GameRoot.Draw, cukup gambar Art.Pointer pada posisi mouse.


Kesimpulan

Jika Anda menguji gim ini sekarang, Anda akan dapat memindahkan kapal dengan tombol WASD atau atau thumbstick kiri, dan mengarahkan aliran peluru terus menerus dengan tombol panah, mouse, atau thumbstick kanan.

Di bagian selanjutnya, kita akan menyelesaikan permainan dengan menambahkan musuh dan skor.

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
Scroll to top
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.