[TUTORIAL] Membuat Game Scrolling Shooter

Di posting pada tanggal  Thursday, 14 April 2016





Scrolling Shooter adalah jenis game tembak-tembakan dimana area game sangat luas (di luar room) dan kamera akan mengikuti pergerakkan pemain. Scrolling Shooter dibagi menjadi dua jenis yaitu, side view (vertikal) dan top view (horizontal). Pada tutorial kali ini, kita akan membuat game scrolling shooter jenis top view karena lebih mudah.


Level: BEGINNER

Game ini sangat simple cocok bagi yang baru pertama kali belajar membuat game.

Aspek yang akan dipelajari.
  • Pergerakkan object.
  • Pembuatan lives (nyawa) dan manipulasinya.
  • Penggunaan alarm.
  • Fungsi menembak.

Game ini konsepnya adalah game tembak-tembakan pesawat luar angkasa seperti game ZANAC X ZANAC, AERO FIGHTERS, AIR ATTACK dan lain sebagainya.Pertama-tama kita siapkan dahulu asset-aset game yang dibutuhkan dalam game ini nantinya seperti resource-nya saya buat sendiri dan yang akan kita gunakan yaitu sebagai berikut.


spr_plane_player
spr_plane_enemy
spr_player_mag
spr_enemy_mag.png

Buka Game Maker:Studio dan buat Project Baru.

Buka Game Maker:Studio dan buat project baru.


Masukkan semua resource game.

Karena game ini sangat sederhana, untuk sementara buat sprite saja terlebih dahulu. Untuk Background dan Sound nantinya bisa kalian tambahkan sendiri. Jangan lupa beri nama sprite-nya seperti pada contoh gambar berikut.

Untuk Sprite Origin saya ubah ke tengah gambar dengan cara klik pada tombol "Center". Hal ini dimaksudkan agar koordinat dan sumbu poros object-nya nanti tepat berada di tengah-tengah.


Buat object baru untuk player.

Langsung saya kita buat object baru untuk playernya dengan cara pilih menu Resources > Create Object. Kemudian beri nama object, dalam hal ini saya namakan obj_player. Untuk sprite-nya pilih spr_plane_player.


Menambahkan event dan action obj_player.

Untuk sebuah object tentu ada batasan aksi sesuai dengan gameplay game kita. Untuk obj_player player sendiri hanya bisa menembakkan peluru dan bergerak dengan menekan tombol keyboard. Setelah kita menentukan batasan aksinya, kita bisa langsung memberikan perintah bisa dengan code maupun action Drag and Drop yang telah tersedia. Untuk tutorial postingan blog ini, akan selalu saya gunakan code saja (recommended).

CREATE

Drag and Drop action Execute Code ( pada tab control) lalu isikan:

Create
nyawa = 3;
menembak = true;
STEP

Drag and Drop action Execute Code ( pada tab control) lalu isikan:

Step
//movement
switch(keyboard_key){
  case vk_left:
    x-=4;
  break;
  case vk_right:
    x+=4;
  break;
}


Membuat room baru.

Buatlah sebuat room baru bisa dengan cara pilih menu Resources > Create Room. Kemudian beri nama rm_player melalui tab settings dan atur ukurannya menjadi 1024 X 768 dan ubah speed-nya menjadi 60. Masukkan object obj_player tadi ke dalam room dengan posisi ditengah bawah seperti pada gambar berikut.


Menguji perintah pada obj_player.

Kita akan menguji apakah code yang kita masukkan tadi jalan atau tidak. Pilih menu Run > Run normally atau dengan menekan tombol F5. Setelah dijalankan, tekanlah tombol kiri dan kanan pada keyboard. Kalo code yang dimasukkan benar harusnya obj_player akan bergerak sesuai dengan tombol yang kita tekan. Namun masih ada masalah (bug) yaitu object dapat keluar dari room seperti gambar berikut ini.

Untuk itu kita perlu memperbaiki code pada obj_player. Buka kembali object properties obj_player dan ubah code pada event Step sehingga menjadi seperti berikut.

Step
//movement
switch(keyboard_key){
  case vk_left:
    x-=4;
  break;
  case vk_right:
    x+=4;
  break;

//Mencegah obj_player keluar room
if(bbox_left < 0 or bbox_right > room_width) x = xprevious; }

Setelah selesai silahkan run kembali. Harusnya jika benar, obj_player sudah tidak bisa keluar room.


Membuat fungsi menembak.

Buatlah object baru beri nama obj_player_peluru, kemudian pilih sprite ke spr_player_mag. Tambahkan event Other > Outside Room pada obj_player_peluru. Lalu tambahkan code:

Outside Room
instance_destroy();

Buka object obj_player. Pada event Step tambahkan lagi kode baru sebagai berikut:

Step
//jika kita menekan tombol spasi
if(keyboard_check(vk_space)){
  peluru = instance_create(x, y, obj_player_peluru);
  peluru.vspeed = -12;
}

Sebetulnya obj_player sudah bisa menembak jika menekan tombol spasi, namun masih ada bug yaitu peluru yang dikeluarkan sangat banyak.

Masih ingatkah kalian, kita sebelumnya membuat variabel menembak = true;. Sekarang kita akan menggunakan variable tersebut untuk memperbaiki bug sebelumnya. Buka kembali kode ke-2 pada event Step di obj_player sebelumnya dan ubah menjadi:

Step
//jika kita menekan tombol spasi
if(keyboard_check(vk_space)){
  if(menembak){
    peluru = instance_create(x, y, obj_player_peluru);
    peluru.vspeed = -12;
    menembak = false;
    alarm[0] = 24; //disesuaikan
  }
}

Kemudian tambahkan event Alarm0 dan masukkan code:

Alarm_0
menembak = true;

Dengan begitu, jika kita menembak maka ada interval waktu tertentu sebelum peluru berikutnya keluar.


Menampilkan nyawa.

Karena kita sebelumnya telah membuat variable local yaitu nyawa = 3;, maka kali ini kita akan menampilkannya pada game. Buka obj_player tambahkan event Draw > Draw GUI kemudian masukkan code:

Draw GUI
draw_text(0, 0, "Nyawa kamu:" + string(nyawa));

JIka code-nya benar, maka setelah di-run akan muncul tampak seperti gambar berikut.


Mempercantik tampilan nyawa.

Sekarang kita akan membuat sebuah gambar yang akan mewakili nilai nyawa pada obj_player. Ini adalah langkah yang tidak harus dilakukan. Namun alangkah biknya jika tampilan game kita lebih menarik agar tidak terlihat membosankan.

Siapkan dulu sprite nyawanya. Untuk saat ini saya akan gunakan gambar berikut dengan origin (0, 0).


spr_live

Kemudian pada event Draw > Draw GUI di obj_player sebelumnya ubah code-nya menjadi:


Draw GUI
for(i=0;i<nyawa;i++){
  draw_sprite(spr_live, 0, 16 + i * sprite_get_width(spr_live), 8);
}

Sekarang coba run game-nya dan jika tidak salah, maka tampilan nyawa pada game telah berubah seperti pada gambar berikut.



Membuat object musuh.

Permainan tidak akan seru jika tidak ada musuh. Maka dari itu kita akan membuat object musuh. Pilih menu Resources > Create Object kemudian saya akan memberi nama obj_enemy dan memilih spr_plane_enemy sebagai sprite-nya.

Atur Depth-nya menjadi 10. Tambahkan code pada event-event berikut.

CREATE
Create
vspeed = 3;
Keterangan: Membuat obj_enemy terbang ke bawah sesuai kecepatan yang ditentukan.
OTHER > OUTSIDE ROOM
Outside Room
instance_destroy();
Keterangan: Membuat obj_enemy hilang (tidak eksis) ketika di luar room.
COLLISION obj_player
obj_player
obj_player.nyawa --;
instance_destroy();
Keterangan: ketika bertumbukan dengan obj_player membuat nyawa obj_player hilang satu dan membuat obj_enemy hancur (tidak eksis).


Membuat fungsi menembak untuk musuh.

Untuk fungsi menembak kali ini cukup sederhana yaitu musuh menembak secara acak berdasarkan peluang yang ditentukan. Tetapi sebelum itu , kita harus membuat object peluru untuk musuh. Pilih menu Resources > Create Object kemudian saya akan memberi nama obj_enemy_peluru dan memilih spr_enemy_mag sebagai sprite-nya. Atur Depth-nya menjadi 10. Kemudian tambahkan event Other > Outside Room dan masukkan code:

Outside Room
instance_destroy();

Setelah selesai dengan obj_enemy_peluru, buka kembali obj_enemy. Tambhankan event Step pada obj_enemy dan masukkan code:

Step
//peluang menembak 1%
randomize();
if(irandom(100) == 1){
  peluru = instance_create(x, y, obj_enemy_peluru);
  peluru.vspeed = 12;
}

Sekarang obj_enemy telah siap untuk menembak dengan jangka waktu secara acak berdasarkan peluang tadi.


Membuat object pengontrol obj_enemy.

Karena pada dasarnya game ini merupakan game dengan waktu durasi waktu yang tidak terbatas. Jadi kita tidak meletakkan obj_enemy secara langsung pada room. Untuk itu, kita perlu membuat sebuah object yang mengatur kemunculan obj_enemy tersebut. Pilih menu Resources > Create Object kemudian saya akan memberi nama obj_enemy_control dan tanpa menggunakan sprite.

Pada event Step di obj_enemy_control masukkan code:

Step
randomize();
if(instance_number(obj_enemy) < 3){
  if(irandom(75) == 1){
    instance_create(random(room_width), -32, obj_enemy);
  }
}

Letakkan obj_enemy_control di dalam room dengan posisi sembarang. Kemudian coba run kembali game-nya. Jika sudah benar, maka akan muncul obj_enemy secara otomatis dengan kemunculan maksimal 3 buah seperti tampak pada gambar berikut.


Manipulasi nyawa.

Bisa dilihat, jika obj_player nyawanya hanya berkurang jika hanya bertumbukan dengan obj_enemy dan juga nyawa bisa bernilai kurang dari 0 (negatif). Kita akan memperbaiki masalah ini.

Buka kembali obj_player tambahkan event Collision obj_enemy_peluru dan masukkan code:

obj_enemy_peluru
nyawa --;
with(other) instance_destroy();

Kemudian tetap pada obj_player di dalam event Step masukkan code baru:

Step
//Munculkan pesan jika nyawa habis
if(nyawa < 1){
   main = show_question("Apakah anda ingin main lagi");
  if(main) room_restart();
  else game_end();
}

Kemudian kita akan me-manipulasi nyawa pada obj_enemy. Buka obj_enemy dan tambahkan event Collision obj_player_peluru. Kemudian masukkan code:

obj_player_peluru
instance_destroy();
with(other) instance_destroy();

Karena obj_enemy hanya memiliki 1 nyawa, maka dia langsung hancur begitu bertumbukkan dengan obj_player_peluru.


Mengembangkan fungsi game.

Beberapa langkah di atas sebenarnya sudah cukup untuk menyelesaikan game scrolling-shooter ini. Namun untuk fungsi yang lebih lanjut tidak akan saya bahas di tutorial kali ini.

Lalu fungsi apa lagi yang bisa ditambahkan ? jawabnya banyak. Ada score ada musuh dengan beberapa level ada boss dan lain-lain. Serta untuk tampilan bisa ditambahkan background, effect ledakkan atau UI yang lebih bagus lagi.


Unduh sampel game.

Demikianlah tutorial Membuat Game Scrolling Shooter ini. Saya mohon maaf jika ada salah-salah kata maupun code dalam tutorial kali ini. Jika kalian kesulitan, kalian disa mengunduh file sample (source) dengan tombol di bawah ini. Di dalam file sample sudah saya tambahkan background yang saya dapat dari http://opengameart.org/

  Unduh Sample (.GMZ)



Doki Doki Maker
© 2016, Muharif Al Hanif
Semua konten dalam blog ini adalah hak milik penulis dan dilarang untuk memuat ulang di media lain baik media elektronik maupun cetak tanpa ijin terlebih dahulu.

Datapatkan update berita dan tutorial