Tutorial Belajar Pemrograman, membuat game, membuat aplikasi, membuat program, android, game maker, yii, php, CSS, HTML, java, javascript, codeigniter, jquery, Pascal, c++

Friday, January 10, 2014

game FPS dengan game maker

FPS atau First Person Shooter adalah game yang memfokuskan tampilan game pada pandangan karakter utama atau dengan kata lain tampilan atau pengambilan kamera gambar dalam game membuat kita seakan - akan menjadi karakter tersebut, karna penglihatan dari orang pertama atau karakter utama.Nah, sekarang kita akan Membuat Game FPS Sederhana Dengan Game Maker. Tutorial kali ini sedikit lebih rumit dan panjang jadi perhatikan baik - baik step - stepnya.

A. Sprites

Sekarang pertama - tama kita harus menyiapkan sprites yang di perlukan untuk membuat game FPS kita.

- Sprites

1. spr_wall_hor

Sprites Tembok Horizontal


2. spr_wall_ver

Sprites Tembok Vertikal



3. spr_player

Sprites Player


4. spr_barrel

Sprites barell
5. spr_barrel_exp

Sprites barell exp
6. spr_plant

Sprites Pohon

7. spr_monster

Sprites Monster


8. spr_monster_dead

Sprites Monster Dead


9. spr_shotgun
Sprites Senjata

- Textures

1. tex_barrel

texture barrel



2. tex_barrel_exp

texture barrel exp




3. tex_plant

texture pohon








4. tex_monster

texture monster




5. tex_monster_dead

texture monster dead


- Background

1. texture_wall

texture wall








2. texture_floor

texture floor








3. texture_ceiling

texture ceiling








Anda juga dapan mengunduh resourcenya di sini : download
Dan anda cukup menginportnya dengan cara klik File > Import Resources.

B. Objek

Sekarang kita akan membuat objek yang akan muncul dalam game.

1. obj_wall_basic

Buatlah sebuah objek dengan nama obj_wall_basic centang pada bagian Visible dan Solid, kemudian tambahkan sebuah event.

Klik Add Event > Draw > Draw > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut 

/*
x1=panjang dimulai
y1=lebar dimulai
x2=panjang akhir
y2=lebar akhir
z1=tinggi dimulai
z2=tinggi akhir
tex=tekstur dinding (dari background 'texture_wall')
*/
{
  d3d_draw_wall(x1,y1,z1,x2,y2,z2,tex,1,1);
}

2. obj_wall_hor

untuk tampilan tembok horizontal buatlah sebuah objek dengan nama obj_wall_hor dengan sprites spr_wall_hor dan setting Parentnya obj_wall_basic kemudian tambahkan sebuah event.

Klik Add Event > Create > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut

{
  x1 = x-16;
  x2 = x+16;
  y1 = y;
  y2 = y;
  z1 = 32;
  z2 = 0;
  tex = background_get_texture(texture_wall);
}

3. obj_wall_ver

untuk tampilan tembok vertikal buatlah sebuah objek dengan nama obj_wall_ver dengan sprites spr_wall_ver dan setting Parentnya obj_wall_basic kemudian tambahkan sebuah event.

Klik Add Event > Create > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut

{
  x1 = x;
  x2 = x;
  y1 = y-16;
  y2 = y+16;
  z1 = 32;
  z2 = 0;
  tex = background_get_texture(texture_wall);
}

4. obj_player

Sekarang kita membuat objek dengan nama obj_player pilih spritesnya spr_player setting depthnya menjadi 100, objek inilah yang akan menjadi player kita dalam objek ini kita akan menambahkan beberapa event jadi perhatikan dengan baik - baik.

Klik Add Event > Create > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut

{
  global.camx = x;
  global.camy = y;
  global.camsin = sin(direction*pi/180);
  global.camcos = cos(direction*pi/180);

  friction = 0.2;
  
  // initialize 3D
  d3d_start();
  d3d_set_hidden(true);
  d3d_set_lighting(false);
  d3d_set_culling(false);
  d3d_set_fog(true,c_black,10,300);
  // interpolate textures
  texture_set_interpolation(true);
 //set health
 health=100;
}

Klik Add Event > Step > Step > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut

{
  global.camx = x;
  global.camy = y;
  global.camsin = sin(direction*pi/180);
  global.camcos = cos(direction*pi/180);
}

Klik Add Event > Collison > obj_wall_basic > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut

{
  x = xprevious;
  y = yprevious;
  if (abs(hspeed) >= abs(vspeed) && not place_meeting(x+hspeed,y,obj_wall_basic)) 
    { x += hspeed; exit;}
 if (abs(vspeed) >= abs(hspeed) && not place_meeting(x,y+vspeed,obj_wall_basic)) 
    { y += vspeed; exit;}
  speed = 0;
}

Klik Add Event > Keyboard > Left > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut


{
  direction += 3;
}

Klik Add Event > Keyboard > Rigt > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut


{
  direction -= 3;
}

Klik Add Event > Keyboard > Up > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut


{
  var maxspeed;
  if keyboard_check(vk_shift) maxspeed = 3 else maxspeed = 1.5;
  if (speed < maxspeed ) speed = min(maxspeed ,speed+0.4);
}

Klik Add Event > Keyboard > Down > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut

{
  var maxspeed;
  if keyboard_check(vk_shift) maxspeed = 3 else maxspeed = 1.5;
  if (speed > -maxspeed) speed = max(-maxspeed,speed-0.4);
}

Klik Add Event > Keyboard > X-Key > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut


{
  var xn,yn;
  xn = x + sin(direction*pi/180);
  yn = y + cos(direction*pi/180);
  if not place_meeting(xn,yn,obj_wall_basic)
    { x = xn; y = yn; }
}

Klik Add Event > Keyboard > Z-Key > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut


{
  var xn,yn;
  xn = x - sin(direction*pi/180);
  yn = y - cos(direction*pi/180);
  if not place_meeting(xn,yn,obj_wall_basic)
    { x = xn; y = yn; }
}

Klik Add Event > Other > No More Health > Pada tab kanan pilih Main 2 > Display Message > Isi denggan pesan "You Are Dead !!!"

tambahkan lagi event baru di bawahnya Pada tab kanan pilih Main 2 > Restart Game

Klik Add Event > Draw > Draw > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut 

{
  // set the projection 
  d3d_set_projection(x,y,10, x+cos(direction*pi/180),y-sin(direction*pi/180),10, 0,0,1);
  // set color and transparency
  draw_set_alpha(1);
  draw_set_color(c_white);
  // draw floor and ceiling 
  d3d_draw_floor(0,0,0,room_width,room_height,0,
                   background_get_texture(texture_floor),32,32);
  d3d_draw_floor(0,0,32,room_width,room_height,32,
                   background_get_texture(texture_ceiling),24,24);
}

5. obj_plant

Sekarang untuk pohonnya buat objek baru dengan nama obj_plant pilih spritesnya spr_plant setting parentnya menjadi obj_wall_basic kemudian tambahkan event.

Klik Add Event > Draw > Draw > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut 

{
  if (point_distance(x,y,global.camx,global.camy) > 240) exit;
  var tex;
  tex = sprite_get_texture(tex_plant,0);
  d3d_draw_wall(x-7*global.camsin,y-7*global.camcos,24,
                x+7*global.camsin,y+7*global.camcos,0,tex,1,1);
}

6. obj_barrel

Sekarang untuk objek drum dalam game buat sebuah objek baru dengan nama obj_barrel pilih spritesnya spr_barrel setting parentnya menjadi obj_wall_basic selanjutnya ubah depthnya menjadi -10 kemudian tambahkan event.

Klik Add Event > Create > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut

{
Image_speed=0.1;
}

Klik Add Event > Draw > Draw > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut

{
  if (point_distance(x,y,global.camx,global.camy) > 240) exit;
  var tex;
  tex = sprite_get_texture(tex_barrel,image_index);
  d3d_draw_wall(x-6*global.camsin,y-6*global.camcos,12,
  x+6*global.camsin,y+6*global.camcos,0,tex,1,1);
}

Klik Add Event > Destroy > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut

{
  instance_create(x,y,obj_barrel_exp);
}

7. obj_barrel_exp

Sekarang untuk objek drum menghilang dalam game buat sebuah objek baru dengan nama obj_barrel_xp pilih spritesnya spr_barrel_xp selanjutnya ubah depthnya menjadi -10 kemudian tambahkan event.

Klik Add Event > Create > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut

{
image_speed=0.2;
}

Klik Add Event > Draw > Draw > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut

{
  if (point_distance(x,y,global.camx,global.camy) > 240) exit;
  var tex;
  tex = sprite_get_texture(tex_barrel_exp,image_index);
  draw_set_alpha(1-0.1*image_index);
  d3d_draw_wall(x-12*global.camsin,y-12*global.camcos,24,
                x+12*global.camsin,y+12*global.camcos,0,tex,1,1);
  draw_set_alpha(1);
}

Klik Add Event > Other > Animation End > Pada tab kanan pilih Main 1 > Destroy Instance

8. obj_monster

Sekaran untuk musuhnya buat sebuah objek dengan nama obj_monster pilih spritesnya spr_monster selanjutnya ubah depthnya menjadi -10 kemudian tambahkan event.

Klik Add Event > Create > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut

{
image_speed=0.3;
image_index=floor(random(4));
}


Klik Add Event > Draw > Draw > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut

{
  if (point_distance(x,y,global.camx,global.camy) > 240) exit;
  var tex;
  tex = sprite_get_texture(tex_monster,image_index);
  d3d_draw_wall(x-8*global.camsin,y-8*global.camcos,19,
                x+8*global.camsin,y+8*global.camcos,3,tex,1,1);
}

Klik Add Event > Destroy > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut

{
  instance_create(x,y,obj_monster_dead);
}

Klik Add Event > Step > Step > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut

{
  if (point_distance(x,y,global.camx,global.camy) > 200) 
    { speed = 0; exit; }
  if (collision_line(x,y,global.camx,global.camy,obj_wall_basic,false,false))
    { speed = 0; exit; }  
  if (point_distance(x,y,global.camx,global.camy) < 12) 
  { 
    speed = 0; health -= 2; 
    exit; 
  }
  move_towards_point(global.camx,global.camy,1.4);
}

9. obj_monster_dead

Sekarang untuk objek monster menghilang dalam game buat sebuah objek baru dengan nama obj_monster_dead pilih spritesnya spr_monster_dead selanjutnya ubah depthnya menjadi -10 kemudian tambahkan event.

Klik Add Event > Create > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut

{
image_speed=0.2;
}

Klik Add Event > Draw > Draw > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut

{
  if (point_distance(x,y,global.camx,global.camy) > 240) exit;
  var tex;
  tex = sprite_get_texture(tex_monster_dead,image_index);
  draw_set_alpha(1-0.1*image_index);
  d3d_draw_wall(x-12*global.camsin,y-12*global.camcos,24,
                x+12*global.camsin,y+12*global.camcos,0,tex,1,1);
  draw_set_alpha(1);
}

Klik Add Event > Other > Animation End > Pada tab kanan pilih Main 1 > Destroy Instance

10. obj_gun

Sekarang untuk senjata pemain buatlah sebuah objek baru dengan nama obj_gun pilih spritesnya spr_shotgun selanjutnya ubah depthnya menjadi -100 kemudian tambahkan event.

Klik Add Event > Create > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut

{
  image_speed = 0;
  image_index = 0;
  can_shoot = true;
}

Klik Add Event > Draw > Draw > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut

{
  d3d_set_projection_ortho(0,0,640,480,0);
  d3d_set_hidden(false);
  draw_sprite_ext(spr_shotgun,-1,0,480-256,2,2,0,c_white,1);
  draw_set_alpha(0.4);
  draw_healthbar(5,460,100,475,health,c_black,c_red,c_lime,0,true,true);
  draw_set_alpha(1);
  d3d_set_hidden(true);
}

Klik Add Event > Other > Animation End > Pada tab kanan pilih Main 1 > Destroy Instance

Klik Add Event > Keyboard > Space > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut

{
  // check whether you can shoot
  if (not can_shoot) exit;
  can_shoot = false;
  // show the animation and play the sound
  image_speed = 0.4;
  image_index = 0;
  // determine what you hit
  var xx, yy, ii;
  xx = global.camx;
  yy = global.camy;
  repeat (50)
  {
    xx += 4*global.camcos;
    yy -= 4*global.camsin;
    ii = instance_position(xx,yy,obj_wall_basic);
    if (ii == noone) 
    {
      ii = instance_position(xx,yy,obj_monster);
      if (ii == noone) continue;
      with (ii) instance_destroy();
      break;
    }
    if object_is_ancestor(ii.object_index,obj_plant) continue;
    if (ii.object_index == obj_barrel)
       with (ii) instance_destroy();
    break;
  }
}

C. Rooms

Buatlah sebuah room baru dengan nama rm_main kemudian ubah snap_x = 16 dan snap_y = 16 kemudian buatlah room anda.

Room FPS Game

*Notes
- Hijau tua adalah objek Pohon
- Merah adalah drum
- Biru muda adalah monster
- Biru tua adalah pemain

Kemudian coba jalankan game anda dengan tekan pada keyboard F5. atau klik RUN > Run Normaly.

Sekarang game FPS anda sudah selesai, anda dapat mengembangkannya menjadi sekeren game - game FPS lain seperti COD atau yang lain.

*Notes game ini di buat dan di coba dengan menggunakan Game Maker 8.0 Full Version

Terima Kasih Telah Mengunjungi Blog Sederhana Ini.

Di Mohon Apabila Anda Ingin Mengcopas Artikel Pada Blog ini Cantumkan URL Sumber.

Sebagai Pengunjung Yang Baik Anda Dapat Meninggalkan Komentar di Blog Sederhana Ini.

Share this post

12 komentar

  1. 5. obj_plant

    Sekarang untuk pohonnya buat objek baru dengan nama obj_plant pilih spritesnya spr_plant setting parentnya menjadi obj_wall_basic kemudian tambahkan event.

    Klik Add Event > Draw > Draw > Pada tab kanan pilih Control > Execute Code > Isi dengan script berikut

    {
    if (point_distance(x,y,global.camx,global.camy) > 240) exit;
    var tex;
    tex = sprite_get_texture(tex_plant,0);
    d3d_draw_wall(x-7*global.camsin,y-7*global.camcos,24,
    x+7*global.camsin,y+7*global.camcos,0,tex,1,1);
    }

    ane gak bisa di bagian
    tex = sprite_get_texture(tex_plant,0);

    ReplyDelete
  2. Pake game maker brp gan ?
    full version g ?
    :-?

    ReplyDelete
  3. Bagaimana ya caranya agar setelah menembak senjata tidak hilang ?
    Karena ada event Animation End, Destroy the instance, Self pada obj_gun setelah menembak jadi hilang senjatanya.

    Mohon pencerahannya, terima kasih.

    ReplyDelete
  4. gimana caranya memasukkan texture

    ReplyDelete
  5. Bagaimana ya caranya agar setelah menembak senjata tidak hilang ?
    Karena ada event Animation End, Destroy the instance, Self pada obj_gun setelah menembak jadi hilang senjatanya.

    Mohon pencerahannya, terima kasih.

    ReplyDelete
  6. Gan Gimana Sih Caranya Supaya Pas Kita Menembak Senjataya Itu Ga Ilang?? Tolong bantuannya.. ga sabar pengen main nih heehe..

    ReplyDelete
  7. Om Jin :-) Izin Copas

    oh iya om jin ijin koreksi
    Untuk agan agan yang habis nembak senjatanya hilang coba tambahkan Dengan
    obj_gun > Animation End > Create instance of random object Isi Object dengan obj_gun semua.
    Ditunggu Kunbalnya Gan adityampc.tk

    ReplyDelete
    Replies
    1. gan untuk memasukan gambar textur gimana yah?

      Delete
  8. bisa sih bisa.., cuma game maker gw yg lite :-d jadi ada beberapa yg gak bisa :v 8-)

    ReplyDelete

:) :) :-) :-) :)) :)) =)) =)) :( :( :-( :-( :(( :(( :d :d :-d :-d @-) @-) :p :p :o :o :>) :>) (o) (o) [-( [-( :-? :-? (p) (p) :-s :-s (m) (m) 8-) 8-) :-t :-t :-b :-b b-( b-( :-# :-# =p~ =p~ :-$ :-$ (b) (b) (f) (f) x-) x-) (k) (k) (h) (h) (c) (c) cheer cheer

 
© Jin Toples Programming
Designed by BlogThietKe Cooperated with Duy Pham
Released under Creative Commons 3.0 CC BY-NC 3.0