Selamat Pagi rekan-rekan sekalian, tak terasa artikel yang membahas tentang game shoot them up sudah sampai pada tahap ini. Kali ini ogut akan mengajarkan cara untuk membuat bom di game perang yang telah kita rintis sebelumnya.
Variasi lain yang dapat ditambahkan untuk membuat game menjadi lebih menarik adalah bom. Jika berada dalam keadaan terdesak pemain dapat memakai senjata pamungkas untuk memusnahkan semua musuh yang tampak di layar. Kekuatan bom dapat diatur sesuai dengan kehendak kita sebagai pembuat game, dan daya hancur bom harus disesuaikan dengan game, jangan terlalu dahsyat dan jangan terlalu kecil.
Proses pembuatan bom sangat sederhana, dan yang terpenting pada saat bom dilepas musuh dan peluru musuh yang ada di layar terkena efeknya (hanya yang ada di layar).
typedef struct
{
double X1, Y1;
double X2, Y2;
double X3, Y3;
double X4, Y4;
}Object_Bomb;
void Isi_Koordinat_Bomb(Object_Bomb Animasi_Bomb_p[4], Game_Object Pesawat_p, double d_bomb)
{
Animasi_Bomb_p[0].X1 = Pesawat_p.X1;
Animasi_Bomb_p[0].Y1 = Pesawat_p.Y1;
Animasi_Bomb_p[0].X2 = Pesawat_p.X4;
Animasi_Bomb_p[0].Y2 = Pesawat_p.Y4;
Animasi_Bomb_p[0].X3 = Pesawat_p.X4 - d_bomb;
Animasi_Bomb_p[0].Y3 = Pesawat_p.Y4;
Animasi_Bomb_p[0].X4 = Pesawat_p.X1 - d_bomb;
Animasi_Bomb_p[0].Y4 = Pesawat_p.Y1;
Animasi_Bomb_p[1].X1 = Pesawat_p.X3;
Animasi_Bomb_p[1].Y1 = Pesawat_p.Y3;
Animasi_Bomb_p[1].X2 = Pesawat_p.X2;
Animasi_Bomb_p[1].Y2 = Pesawat_p.Y2;
Animasi_Bomb_p[1].X3 = Pesawat_p.X2 + d_bomb;
Animasi_Bomb_p[1].Y3 = Pesawat_p.Y2;
Animasi_Bomb_p[1].X4 = Pesawat_p.X3 + d_bomb;
Animasi_Bomb_p[1].Y4 = Pesawat_p.Y3;
Animasi_Bomb_p[2].X1 = Pesawat_p.X2;
Animasi_Bomb_p[2].Y1 = Pesawat_p.Y2;
Animasi_Bomb_p[2].X2 = Pesawat_p.X1;
Animasi_Bomb_p[2].Y2 = Pesawat_p.Y1;
Animasi_Bomb_p[2].X3 = Pesawat_p.X1;
Animasi_Bomb_p[2].Y3 = Pesawat_p.Y1 - d_bomb;
Animasi_Bomb_p[2].X4 = Pesawat_p.X2;
Animasi_Bomb_p[2].Y4 = Pesawat_p.Y2 - d_bomb;
Animasi_Bomb_p[3].X1 = Pesawat_p.X4;
Animasi_Bomb_p[3].Y1 = Pesawat_p.Y4;
Animasi_Bomb_p[3].X2 = Pesawat_p.X3;
Animasi_Bomb_p[3].Y2 = Pesawat_p.Y3;
Animasi_Bomb_p[3].X3 = Pesawat_p.X3;
Animasi_Bomb_p[3].Y3 = Pesawat_p.Y3 + d_bomb;
Animasi_Bomb_p[3].X4 = Pesawat_p.X4;
Animasi_Bomb_p[3].Y4 = Pesawat_p.Y4 + d_bomb;
}
void Display_Bomb(Object_Bomb Animasi_Bomb_p[4], double d_geser, unsigned int image, unsigned int mask)
{
int i;
for (i = 0; i < 4; i++)
{
glEnable(GL_BLEND);
glBlendFunc(GL_DST_COLOR, GL_ZERO);
glBindTexture(GL_TEXTURE_2D, mask);
glBegin(GL_POLYGON);
glTexCoord2d(0.0, 0.0);
glVertex2d( Animasi_Bomb_p[i].X1, Animasi_Bomb_p[i].Y1);
glTexCoord2d(1.0, 0.0);
glVertex2d( Animasi_Bomb_p[i].X2, Animasi_Bomb_p[i].Y2);
glTexCoord2d(1.0, 1.0);
glVertex2d( Animasi_Bomb_p[i].X3, Animasi_Bomb_p[i].Y3);
glTexCoord2d(0.0, 1.0);
glVertex2d( Animasi_Bomb_p[i].X4, Animasi_Bomb_p[i].Y4);
glEnd();
glBlendFunc(GL_ONE, GL_ONE);
glBindTexture(GL_TEXTURE_2D, image);
glBegin(GL_POLYGON);
glTexCoord2d(0.0, 0.0);
glVertex2d( Animasi_Bomb_p[i].X1, Animasi_Bomb_p[i].Y1);
glTexCoord2d(1.0, 0.0);
glVertex2d( Animasi_Bomb_p[i].X2, Animasi_Bomb_p[i].Y2);
glTexCoord2d(1.0, 1.0);
glVertex2d( Animasi_Bomb_p[i].X3, Animasi_Bomb_p[i].Y3);
glTexCoord2d(0.0, 1.0);
glVertex2d( Animasi_Bomb_p[i].X4, Animasi_Bomb_p[i].Y4);
glEnd();
glDisable(GL_BLEND);
}
//update posisi bomb
Animasi_Bomb_p[0].X1 -= d_geser;
Animasi_Bomb_p[0].X2 -= d_geser;
Animasi_Bomb_p[0].X3 -= d_geser;
Animasi_Bomb_p[0].X4 -= d_geser;
Animasi_Bomb_p[1].X1 += d_geser;
Animasi_Bomb_p[1].X2 += d_geser;
Animasi_Bomb_p[1].X3 += d_geser;
Animasi_Bomb_p[1].X4 += d_geser;
Animasi_Bomb_p[2].Y1 -= d_geser;
Animasi_Bomb_p[2].Y2 -= d_geser;
Animasi_Bomb_p[2].Y3 -= d_geser;
Animasi_Bomb_p[2].Y4 -= d_geser;
Animasi_Bomb_p[3].Y1 += d_geser;
Animasi_Bomb_p[3].Y2 += d_geser;
Animasi_Bomb_p[3].Y3 += d_geser;
Animasi_Bomb_p[3].Y4 += d_geser;
}
Sedangkan di Main_Program.cpp ogut menyisipkan perintah-perintah di bawah pada fungsi Keyboard_ditekan dan fungsi Display_ke_Screen.
void Keyboard_ditekan()
{
...
...
...
//key untuk melepas bom
if (GetKeyState('B') & 0x80)
{
if ((Bomb_Aktif != 1) && (Pesawat[0].Bomb > 0))
{
Bomb_Aktif = 1;
Destroy_musuh_peluru = 1;
Counter_animasi_bomb = 0;
Pesawat[0].Bomb--;
//koordinat untuk animasi bomb
Isi_Koordinat_Bomb(Animasi_Bomb, Pesawat[0], 100.0);
SoundEffect[8].Play(false);
}
}
...
...
...
}
void Display_ke_Screen()
{
...
...
...
//BOMB
if (Bomb_Aktif == 1)
{
if (Destroy_musuh_peluru == 1)
{
//musnahkan peluru enemy
for (i = 0; i < total_peluru_enemy; i++)
{
if ( Peluru_Enemy1[i].Power != 0)
{
Peluru_Enemy1[i].Power = 0;
Aktifkan_Api_Tertembak(Api_Tertembak, total_efek_tertembak,
Peluru_Enemy1[i], 30.0);
}
}
//musuh yang ada di layar kena bomb
//Power musuh berkurang
for (i = 0; i < total_enemy1; i++)
{
if ((Enemy_1[i].Power != 0) && (Enemy_1[i].Inside_Screen == 1))
{
Enemy_1[i].Power -= Bomb_Power;
if (Enemy_1[i].Power <= 0)
{
Enemy_1[i].Power = 0;
Aktifkan_Api_Terbakar(Api_terbakar_m1, total_efek_terbakar,
Enemy_1[i], 80.0);
SoundEffect[3].Play(false);
}
}
}
Destroy_musuh_peluru = 0;
}
//tampilkan animasi bom
Display_Bomb(Animasi_Bomb, 30.0 ,i_bomb, m_bomb);
Counter_animasi_bomb++;
if (Counter_animasi_bomb == 60)
Bomb_Aktif = 0;
}
...
...
...
}
Demikian rekan-rekan cara membuat bom, variasi bom dapat anda kembangkan sendiri karena ogut hanya memberi contoh yang mudah. Sampai disini dulu yah nanti akan ogut sambung lagi dengan cerita game yang lebih seru, karena masih banyak ide yang terus bermunculan tetapi waktu menulis yang agak sempit sehingga ogut harus membagi waktu antara menulis dan kegiatan lain.
Salam Sukses Selalu
Heriady
heriady.yoh@gmail.com
Artikel terkait
Panduan Lengkap Membuat Game Perang Shoot Them Up
|
|
Vektor R2
|
Tidak ada komentar:
Posting Komentar