Tampilkan postingan dengan label Sound. Tampilkan semua postingan
Tampilkan postingan dengan label Sound. Tampilkan semua postingan

Minggu, 23 Agustus 2015

Membuat Babak atau Level Game Engine

Membuat beberapa babak atau biasa disebut level di game engine


Selamat pagi semuanya, salam sukses dan salam sejahterah selalu...ini adalah artikel terakhir yang membahas tentang game engine yang ogut buat sendiri. Beberapa artikel sebelumnya ogut mengulas tuntas game engine GEEmas7, untuk melihat daftar artikel lengkap tentang game engine ini harap klik disini. Di dalam daftar tersebut rekan-rekan bisa membaca setiap artikel yang ogut tulis tentang game engine ini secara lengkap dan berurutan.


Artikel kali ini akan membahas cara untuk membuat babak atau level di game engine ini. Masih sama dengan cara sebelumnya rekan-rekan hanya butuh meng-edit MainProgram.cpp untuk menambahkan level di game bertipe shoot them up ini.

Pada game engine ini level bisa Anda buat dengan memakai trik sederhana.

#include"My7OpenGL.h"
#include"GEEmas7.h"

HWND MainHWND = NULL;

My7OpenGL GameOpenGL;
GEEmas7 GameObject;

int WINAPI WinMain(HINSTANCE HInstanceP,
HINSTANCE HPrevinstanceP,
LPSTR LpcmdLineP, int NShowcmdP)
{
GameOpenGL.SetHInstance(HInstanceP);
if (!GameOpenGL.CreateOpenGLWindow(MainHWND))
return 0;

if (!GameObject.geInisialisasi(MainHWND))
{
GameOpenGL.CloseOpenGLWindow(MainHWND);
return 0;
}

GameOpenGL.DisplayLoading();

//////////////////////////
//Loading data level-1
//////////////////////////
if (!GameObject.geLoadBGTexture
("BmpData/BG1.bmp"))
{ GameOpenGL.CloseOpenGLWindow(MainHWND);
return 0; }

if (!GameObject.geLoadJFTexture(
"JF/kiri.bmp",
"JF/kanan.bmp",
"JF/gkiri.bmp",
"JF/tengah.bmp",
"JF/gkanan.bmp"))
{ GameOpenGL.CloseOpenGLWindow(MainHWND);
return 0; }

if (!GameObject.geLoadEnemyTexture(
"Enemy1/gkiri.bmp",
"Enemy1/tengah.bmp",
"Enemy1/gkanan.bmp"))
{ GameOpenGL.CloseOpenGLWindow(MainHWND);
return 0; }

if (!GameObject.geLoadEnemyList
("Level_1/enemy_LV1.txt"))
{ GameOpenGL.CloseOpenGLWindow(MainHWND);
return 0; }

if (!GameObject.geLoadBonusTexture(
"Bonus1/gkiri.bmp",
"Bonus1/tengah.bmp",
"Bonus1/gkanan.bmp"))
{ GameOpenGL.CloseOpenGLWindow(MainHWND);
return 0; }

if (!GameObject.geLoadBonusList
("Level_1/Bonus_LV1.txt"))
{ GameOpenGL.CloseOpenGLWindow(MainHWND);
return 0; }


if (!GameObject.geLoadBigBossTexture(
"BigBoss1/gkiri.bmp",
"BigBoss1/tengah.bmp",
"BigBoss1/gkanan.bmp"))
{ GameOpenGL.CloseOpenGLWindow(MainHWND);
return 0; }

if (!GameObject.geLoadBigBoss
("Level_1/BigBoss_LV1.txt"))
{ GameOpenGL.CloseOpenGLWindow(MainHWND);
return 0; }


GameObject.gePlayRandomSoundBG();
GameObject.geSetGameLoop();

//////////////////////////
//while untuk level-1
//////////////////////////
while (GameOpenGL.OpenGLMainLoop && 
GameObject.geGameLoop)
    {
GameOpenGL.MessageHandle();

//////////////////////////
//render
//////////////////////////
GameObject.geDisplayBG();

GameObject.geDisplayEnemy();

GameObject.geDisplayBigBoss();

GameObject.geDisplayJackFighter();

GameObject.geDisplayEffect();

//////////////////////////

GameOpenGL.OpenGLSwapBuffer();
GameOpenGL.BreakProgram();

GameObject.geTimerGEEmas7(GAME_DELAY);
}

//////////////////////////
//untuk mendeteksi
//game terus berlanjut
//ke level berikutnya
//atau tidak
//////////////////////////
if (GameObject.geContinue)
{ //////////////////////////
//Loading data level-2
//////////////////////////

GameOpenGL.DisplayLoading();

if (!GameObject.geLoadBGTexture
("BmpData/BG2.bmp"))
{ GameOpenGL.CloseOpenGLWindow(MainHWND);
return 0; }

if (!GameObject.geLoadEnemyTexture(
"Enemy2/gkiri.bmp",
"Enemy2/tengah.bmp",
"Enemy2/gkanan.bmp"))
{ GameOpenGL.CloseOpenGLWindow(MainHWND);
return 0; }

if (!GameObject.geLoadEnemyList
("Level_2/enemy_LV2.txt"))
{ GameOpenGL.CloseOpenGLWindow(MainHWND);
return 0; }

if (!GameObject.geLoadBonusTexture(
"Bonus2/gkiri.bmp",
"Bonus2/tengah.bmp",
"Bonus2/gkanan.bmp"))
{ GameOpenGL.CloseOpenGLWindow(MainHWND);
return 0; }

if (!GameObject.geLoadBonusList
("Level_2/Bonus_LV2.txt"))
{ GameOpenGL.CloseOpenGLWindow(MainHWND);
return 0; }

if (!GameObject.geLoadBigBossTexture(
"BigBoss2/gkiri.bmp",
"BigBoss2/tengah.bmp",
"BigBoss2/gkanan.bmp"))
{ GameOpenGL.CloseOpenGLWindow(MainHWND);
return 0; }

if (!GameObject.geLoadBigBoss
("Level_2/BigBoss_LV2.txt"))
{ GameOpenGL.CloseOpenGLWindow(MainHWND);
return 0; }

}
else
{
GameOpenGL.CloseOpenGLWindow(MainHWND);
return 0;
}

GameObject.geSetGameLoop();

//////////////////////////
//while untuk level-2
//////////////////////////
while (GameOpenGL.OpenGLMainLoop && 
GameObject.geGameLoop)
    {
GameOpenGL.MessageHandle();

//////////////////////////
//render
//////////////////////////
GameObject.geDisplayBG();

GameObject.geDisplayEnemy();

GameObject.geDisplayBigBoss();

GameObject.geDisplayJackFighter();

GameObject.geDisplayEffect();

GameObject.gePlayRandomSoundBG();
//////////////////////////

GameOpenGL.OpenGLSwapBuffer();
GameOpenGL.BreakProgram();

GameObject.geTimerGEEmas7(GAME_DELAY);
}

GameOpenGL.CloseOpenGLWindow(MainHWND);

return 0;
}

Pada listing program di atas terdapat dua buah pengulangan while, yang pertama digunakan untuk level pertama, dan yang kedua dipakai untuk level berikutnya.

Listing program di atas tidak berbeda jauh dengan program-program yang telah ogut terangkan sebelumnya, hanya pada saat setelah pengulangan while pertama terdapat kondisi if untuk mendeteksi apakah game masih bisa berlanjut ke level berikutnya atau game sudah selesai karena Jack Fighter telah dikalahkan musuh.

Dengan menggunakan kondisi if seperti di atas maka game bisa dibuat menjadi beberapa level. Musuh, bonus dan Big Boss di load untuk setiap level-nya sehingga masing-masing level mempunyai musuh, bonus dan Bis Boss dengan karakter yang berbeda-beda. Untuk lebih jelas tentang proses load ini harap klik link musuh dan bonus serta link Big Boss.

Tampilan level pertama


tampilan level berikutnya.


Demikian rekan-rekan artikel tentang game engine ini, proses pembuatan game shoot them up dengan game engine ini sudah ogut bahas semua, sampai jumpa di artikel yang lain.

Salam Game Engine


Heriady
heriady.yoh@gmail.com




Artikel terkait

Panduan Lengkap Membuat Game Perang Shoot Them Up

Panduan Lengkap Membuat Game Perang Dengan Game Engine

Selasa, 18 Agustus 2015

Panduan Lengkap Membuat Game Perang Dengan Game Engine

Selamat Pagi rekan-rekan, masih dalam suasana HUT-RI ke-70, ogut ucapkan salam sejahterah selalu buat Anda sekalian. Pada artikel ini ogut tidak akan membahas apapun, tapi ogut akan mengumpulkan semua artikel-artikel tentang game engine yang telah ogut tulis sebelumnya, sehingga akan membuat rekan-rekan sekalian mudah untuk belajar.





Pada link di bagian bawah ini Anda dapat menuju ke artikel yang membahas tentang ‘Membuat Game Dengan Game Engine’ secara lengkap dan berurutan sehingga mudah untuk dipelajari. Akhir kata ogut selamat belajar.

Update 1 Jan 2016

Dan jangan lupa ogut juga punya contoh game yang lain, Game Shoot Them Up dan Game Jack Onil.





Salam Game Engine


Heriady
heriady.yoh@gmail.com


Game Engine
Membuat Game Engine Sendiri dengan Visual C++
Kerangka Dasar Program Game Engine
Latar Belakang Program Game Engine
Membuat Pesawat Tokoh Jagoan Program Game Engine
Suara Efek, Suara Random dan Suara Background Game Engine
Membuat Musuh dan Bonus dengan Game Engine
Membuat Musuh Terakhir atau Big Boss Game Engine
Membuat Efek Tambahan dengan Game Engine
Membuat Babak atau Level Game Engine

Senin, 17 Agustus 2015

Suara Efek, Suara Random dan Suara Background Game Engine

Memainkan / play suara efek, suara secara random dan suara latar belakang di game engine


Selamat pagi semuanya, pagi ini adalah pagi yang spesial...karena bertepatan dengan HUT-RI yang ke 70. Dan untuk ikut memeriahkan acara HUT-RI kali ini ogut akan menghadiri undangan acara demo yang diadakan di salah satu sport klub, dan sebelum pergi ke acara tersebut nge-blog dulu.

Di artikel kali ini ogut akan membahas cara untuk memainkan suara efek, suara random dan suara latar belakang di game engine yang ogut buat sendiri. Sebuah game tidak akan lengkap jika tidak diisi dengan suara, untuk memainkan suara di game engine ini rekan-rekan tidak perlu kode program  yang panjang dan sulit, cukup tambahkan satu atau dua baris kode program di MainProgram.cpp maka suara akan terdengar.


Suara Efek
Suara-suara efek akan berbunyi jika Anda meletakkan sejumlah file Wave di dalam folder “Wave/Effect/”. File-file yang diletakkan pada folder ini harus mempunyai nama yang spesifik seperti tabel di bawah.


Jika nama-nama file yang Anda tempatkan pada folder tidak sesuai dengan tabel di atas maka program akan tetap berjalan tetapi efek suara yang diharapkan tidak akan terdengar.

Anda dapat mengubah folder tempat suara efek berada, ogut menyediakan fungsi geSetPathSoundEffect dan fungsi ini harus diletakkan sebelum proses pengulangan while.

...
...
...
/////////////////////////////
//Fungsi utama
/////////////////////////////
int WINAPI WinMain(HINSTANCE HInstanceP,
HINSTANCE HPrevinstanceP,
LPSTR LpcmdLineP, int NShowcmdP)
{
...
...
...

GameObject.geSetPathSoundEffect("WAVE/Effect2/");

GameObject.geSetGameLoop();

while (GameOpenGL.OpenGLMainLoop)
    {
...
...
...
}

GameOpenGL.CloseOpenGLWindow(MainHWND);

return 0;
}

Suara Random
Suara random atau suara acak adalah suara-suara yang akan terdengar secara acak dengan jeda waktu tertentu.

Ada sepuluh buah suara acak yang ogut sediakan untuk membuat game ini lebih hidup, suara acak tersebut dapat rekan-rekan aktifkan dengan fungsi gePlayRandomSoundBG.

#include"My7OpenGL.h"
#include"GEEmas7.h"

HWND MainHWND = NULL;

My7OpenGL GameOpenGL;
GEEmas7 GameObject;

/////////////////////////////
//Fungsi utama
/////////////////////////////
int WINAPI WinMain(HINSTANCE HInstanceP, 
HINSTANCE HPrevinstanceP, 
LPSTR LpcmdLineP, int NShowcmdP)
{
GameOpenGL.SetHInstance(HInstanceP);
if (!GameOpenGL.CreateOpenGLWindow(MainHWND))
return 0;

if (!GameObject.geInisialisasi(MainHWND))
{
GameOpenGL.CloseOpenGLWindow(MainHWND);
return 0;
}

GameOpenGL.DisplayLoading();

GameObject.gePlayRandomSoundBG();

GameObject.geSetGameLoop();

while (GameOpenGL.OpenGLMainLoop)
    {
GameOpenGL.MessageHandle();

/////////////////////////////
//Render objek game, 
//di bawah ini
/////////////////////////////

GameObject.geDisplayBG();

/////////////////////////////
//Tokoh Utama / Jack Fighter
/////////////////////////////
GameObject.geDisplayJackFighter();

/////////////////////////////
GameOpenGL.OpenGLSwapBuffer(); 
GameOpenGL.BreakProgram(); 

GameObject.geTimerGEEmas7(GAME_DELAY); 

GameOpenGL.CloseOpenGLWindow(MainHWND);

return 0;
}

Suara acak ini dihasilkan oleh sepuluh file Wave yang bernama 0.wav hingga 9.wav.

Folder untuk suara acak ini dapat Anda ganti dengan fungsi di bawah.
...
...
...
/////////////////////////////
//Fungsi utama
/////////////////////////////
int WINAPI WinMain(HINSTANCE HInstanceP, 
HINSTANCE HPrevinstanceP, 
LPSTR LpcmdLineP, int NShowcmdP)
{
...
...
...
GameObject.geSetPathRandomSoundBG("WAVE/Random2/");

GameObject.geSetGameLoop();

while (GameOpenGL.OpenGLMainLoop)
    {
...
...
...

GameOpenGL.CloseOpenGLWindow(MainHWND);

return 0;
}

Suara Musik
Game engine GEEmas7 dilengkapi dengan fungsi yang bisa dipakai untuk memainkan musik secara berulang-ulang hingga game selesai.

#include"My7OpenGL.h"
#include"GEEmas7.h"

HWND MainHWND = NULL;

My7OpenGL GameOpenGL;
GEEmas7 GameObject;

/////////////////////////////
//Fungsi utama
/////////////////////////////
int WINAPI WinMain(HINSTANCE HInstanceP, 
HINSTANCE HPrevinstanceP, 
LPSTR LpcmdLineP, int NShowcmdP)
{
GameOpenGL.SetHInstance(HInstanceP);
if (!GameOpenGL.CreateOpenGLWindow(MainHWND))
return 0;

if (!GameObject.geInisialisasi(MainHWND))
{
GameOpenGL.CloseOpenGLWindow(MainHWND);
return 0;
}

GameOpenGL.DisplayLoading();

GameObject.geLoadAndPlaySoundBG("wave/BG/BG.wav"); 

GameObject.geSetGameLoop();

while (GameOpenGL.OpenGLMainLoop)
    {
GameOpenGL.MessageHandle();

/////////////////////////////
//Render objek game, 
//di bawah ini
/////////////////////////////

GameObject.geDisplayBG();

/////////////////////////////
//Tokoh Utama / Jack Fighter
/////////////////////////////
GameObject.geDisplayJackFighter();


/////////////////////////////

GameOpenGL.OpenGLSwapBuffer(); 
GameOpenGL.BreakProgram(); 

GameObject.geTimerGEEmas7(GAME_DELAY); 

GameOpenGL.CloseOpenGLWindow(MainHWND);

return 0;
}

Fungsi geLoadAndPlaySoundBG dapat Anda pakai untuk memainkan musik dari sebuah file Wave dan fungsi ini harus Anda tempatkan sebelum proses pengulangan while pada program game.

Tuntas sudah pembahasan tentang suara di game engine, sampai di sini dulu ya rekan-rekan, tidak sulit kan, kode programnya singkat sekali. Di kesempatan lain akan ogut sambung lagi, di artikel berikutnya ogut akan menjelaskan cara untuk menampilkan musuh dan bonus.

Salam Game Engine


Heriady
heriady.yoh@gmail.com




Artikel terkait

Panduan Lengkap Membuat Game Perang Shoot Them Up

Panduan Lengkap Membuat Game Perang Dengan Game Engine

Kamis, 16 Juli 2015

Contoh Program Direct Sound

Musim angin barat dan layangan pada terbang di udara...


Selamat pagi sobat-sobat sekalian, senang sekali rasanya bisa menulis  artikel  yang satu ini untuk melengkapi program game. Sebuah game tidak akan lengkap jika tidak ada efek suara atau  sound effect dan untuk memutar / memainkan suara diperlukan program tambahan. OpenGL sendiri sampai sejauh ini yang ogut ketahui belum memasukkan unsur suara kedalam library-nya, sehingga untuk membuat suara pada program game Anda dapat menggunakan library direct sound.


Pada program game suara yang akan dimainkan (play) harus di load dahulu ke memory, sehingga pada saat akan di play proses memainkan suara tidak akan mengganggu proses game itu sendiri. Jika load suara tidak dilakukan maka game yang Anda buat akan terhenti sejenak, apalagi jika suara yang akan Anda mainkan bersumber dari file yang berukuran besar.

Program suara yang ogut gunakan adalah direct sound yang sudah ada bersama dengan VC++, sehingga Anda tidak usah mencari library tambahan. Contoh program game di artikel ini juga ogut gunakan untuk game engine dan game shoot them up, kedua artikel sudah pernah ogut posting di blog ini. 

Langkah pertama untuk membuat program suara tambahkan include seperti di bawah ini.

//include untuk direct sound
#include "MySound.h"

Jangan lupa library juga harus Anda sertakan.

//library untuk direct sound
#pragma comment(lib, "winmm.lib")  
#pragma comment(lib, "dxguid.lib")
#pragma comment(lib, "dsound.lib")

Deklarasi class.

///////////////////WAVE SOUND
const int total_sound = 2;
MySoundManager SoundManager;
MySoundBuffer SoundEffect[total_sound];  

Inisialisasi di awal program game Anda.

if (!SoundManager.InisialisasiSound(My_HWND))
return 0;

Load suara dan setelah selesai suara dapat langsung Anda mainkan (play).

//load file Wave
bool Load_Sound()
{
SoundManager.CreateSound("waves/BG.wav", SoundEffect[0]);
SoundManager.CreateSound("waves/fire.wav", SoundEffect[1]);

///////////PLAY WAVE (BG Sound)
SoundEffect[0].Play(true); //play looping

return true;
}

Jika suara ingin Anda play hanya sekali(tidak berulang-ulang) ganti parameter true menjadi false.

SoundEffect[0].Play(false);

Close jika program game telah selesai.

SoundEffect[0].ClearBuffer();
SoundEffect[1].ClearBuffer();
SoundManager.ClosingSound();

Demikianlah akhir dari episode kali ini, semoga program suara ini bermanfaat bagi rekan-rekan sekalian.

Selamat Berkreasi


Heriady
heriady.yoh@gmail.com



Selasa, 14 Juli 2015

Teknik Masking Tanpa Tekstur Mask

Suatu pagi yang cerah...sebenarnnya masih pagi banget dan matahari belum muncul, tapi untuk membuat tetap bersemangat yah tulis aja pagi yang cerah.


Selamat pagi semuanya, rekan-rekan sekalian...kali ini ogut hanya ingin memberikan ide sederhana saja untuk membuat game 2D, di artikel terdahulu ogut pernah menulis artikel tentang teknik masking (contoh program dengan VC++ dan dengan VB .Net). Teknik masking sangat berguna untuk membuat game 2D, bagi Anda yang belum membaca artikel terdahulu ogut ulang sedikit ya, teknik masking membutuhkan dua buah tekstur yaitu tektur image dan tekstur mask, tekstru mask hanya mempunyai dua warna yaitu putih sempurna dan hitam sempurna.

Ilustrasi teknik masking dapat Anda lihat pada gambar dibawah ini. Dua buah tekstur digabung menjadi satu, sehingga tampak objek pohon seperti aslinya (warna hitam di belakang hilang)


Untuk dapat menampilkan sebuah objek seperti di atas maka Anda harus mempunyai dua buah tekstur, tekstur image harus Anda buat, tidak bisa tidak, tetapi tekstur mask dapat Anda buat secara programming. Kenapa? Karena tekstur mask hanya mempunyai dua buah warna yaitu putih dan hitam sempurna.

Contoh tekstur image  yang dibuat dari file bitmap 24 bit.


Pada artikel game engine yang pernah ogut tulis sebelumnya, trik seperti ini sebenarnya sudah ogut gunakan, jika Anda melihat source code pada saat proses loading tekstur, tidak ada proses untuk loading tekstur mask, karena tekstur mask dibuat secara programming.

Berikut fungsi yang ogut gunakan untuk membuat tekstur image dan mengkonversi menjadi tektur mask.

bool GEEmas7::CreateGETexture(char *file, unsigned int &IDImage, unsigned int &IDMask, bool BoolMask)
{
FILE *pFile = 0;            
BITMAPFILEHEADER BmpFileHeader;    
BITMAPINFOHEADER BmpInfoHeader;
unsigned char *BmpImage;

unsigned char BGR_to_RGB = 0;

//pFile = fopen(file, "rb");  
errno_t err;

err = fopen_s(&pFile, file, "rb");

//if(!fp)
if (err != 0)
{
MessageBox(NULL, file, "File Bmp tidak ditemukan, BMP Error 01", MB_OK);
return false;
}

/*if(pFile == 0)
{
MessageBox(NULL, file, "File Bmp tidak ditemukan, BMP Error 01", MB_OK);
return false;    
}*/


fread(&BmpFileHeader, sizeof(BITMAPFILEHEADER), 1, pFile);

if(BmpFileHeader.bfType != 0x4D42)
{
fclose(pFile);

MessageBox(NULL, file, "Format file bukan Bmp, BMP Error 02", MB_OK);

return false;
}

fread(&BmpInfoHeader, sizeof(BITMAPINFOHEADER), 1, pFile);

   if(BmpInfoHeader.biSizeImage == 0)
      BmpInfoHeader.biSizeImage = BmpInfoHeader.biWidth * BmpInfoHeader.biHeight * 3;

fseek(pFile, BmpFileHeader.bfOffBits, SEEK_SET);

BmpImage = (unsigned char*)malloc(BmpInfoHeader.biSizeImage);

if(!BmpImage)
{
free(BmpImage);
fclose(pFile);

MessageBox(NULL, file, "Gagal alokasi memory untuk texture, BMP Error 03", MB_OK);
return false;
}

fread(BmpImage, 1, BmpInfoHeader.biSizeImage, pFile);

fclose(pFile);

if(BmpImage == 0)
{
MessageBox(NULL, file, "Gagal membaca data Bmp, BMP Error 04", MB_OK);

return false;
}

for(int i = 0; i < (int)BmpInfoHeader.biSizeImage; i += 3)
{
BGR_to_RGB = BmpImage[i];
BmpImage[i] = BmpImage[i + 2];
BmpImage[i + 2] = BGR_to_RGB;
}

if(BmpImage == 0)
{
MessageBox(NULL, file, "Gagal membuat RGB texture, BMP Error 05", MB_OK);
return false;
}

//generate texture
glGenTextures(1, &IDImage);
glBindTexture(GL_TEXTURE_2D, IDImage);

gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, BmpInfoHeader.biWidth, BmpInfoHeader.biHeight, GL_RGB, GL_UNSIGNED_BYTE, BmpImage);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, BmpInfoHeader.biWidth, BmpInfoHeader.biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, BmpImage);

/////////////////////////////////////////
//MEBUAT TEXTURE MASK
/////////////////////////////////////////
if (BoolMask)
{
//convert BmpImage jadi mask
ConvertToMask((int)BmpInfoHeader.biSizeImage, BmpImage);

//generate texture
glGenTextures(1, &IDMask);
glBindTexture(GL_TEXTURE_2D, IDMask);

gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, BmpInfoHeader.biWidth, BmpInfoHeader.biHeight, GL_RGB, GL_UNSIGNED_BYTE, BmpImage);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, BmpInfoHeader.biWidth, BmpInfoHeader.biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, BmpImage);
}
/////////////////////////////////////////

if(BmpImage)
{
free(BmpImage);
BmpImage = 0;
}
 
   return true;
}

Konversi tekstur image menjadi tekstur mask.

void GEEmas7::ConvertToMask(int MaskSize, unsigned char ArrayTexture[])
{
//ubah hitam sempurna jadi putih sempurna,
//dan warna object jadi hitam sempurna

//   0 hitam sempurna
// 255 putih sempurna

for (int i = 0; i < MaskSize; i++)
if (ArrayTexture[i] == 0)
ArrayTexture[i] = 255;
else
ArrayTexture[i] = 0;
}

Bagaimana rekan-rekan? Dengan trik seperti ini maka Anda akan menghemat banyak waktu, karena tekstur mask tidak perlu Anda buat dengan menggunakan tools seperti Photoshop.

Salam Hangat


Heriady
heriady.yoh@gmail.com




Artikel terkait

Membuat Game Engine Sendiri dengan Visual C++

Membuat File Bitmap 24 Bit

Warna Putih dan Hitam Sempurna

Teknik Masking dengan OpenGL 2D

Teknik Masking pada OpenTK 2D

Sabtu, 11 Juli 2015

Membuat Game Shoot Them Up dengan Visual C++

Suatu pagi hari yang dingin...angin barat berhembus kencang...dan di langit layangan ada dimana-mana...


Pagi rekan-rekan sekalian, salam sejahterah selalu...tak terasa puasa hanya tinggal hitungan jari...sudah menuju ke detik-detik kemenangan.

Pada artikel kali ini ogut akan membagi program game pertama yang ogut buat, maksudnya pertama adalah program game yang berhasil ogut buat untuk pertama kalinya. Yang gagal jangan ditanya, banyak banget, dari berbagai macam bahasa pemrograman dicoba dan dicoba lagi dan akhirnya dengan Visual C++ berhasil. Saat pertama kali dibuat program ini dibuat dengan menggunakan Visual C++ versi 6.0, yang waktu itu tergabung di dalam paket Visual Studio 1998. Waktu itu komputernya masih minjam sana minjam sini, belum punya PC sendiri. Dan itupun PC nya rada ketinggalam jadi pake Visual Studio versi lama yang masih bisa jalan di PC tersebut (Pentium IV), jadi inget deh susahnya waktu itu untuk nyoba bikin program.

Ok cukup sudah kenangannya dibahas, sekarang saatnya mencoba game ini. Game ini bertipe Shoot Them Up atau bahasa kerennya tembak aja terus sampe habis, kagak usah banyak mikir.

Proses pembuatan game ini cukup panjang, tetapi koding untuk program game ini ogut buat  sesederhana mungkin, kecuali masalah sound-nya  menggunakan OOP, yang lain tidak ada OOP nya. Pada saat pertama kali dibuat sound pada game ini menggunakan OpenAL, karena ogut pada waktu itu belum menguasai cara memainkan (play) wave file. Tetapi sekarang sound-nya udah ogut ubah karena untuk menjalankan sound dengan OpenAL dibutuhkan library tambahan. Program pada game ini juga lebih mudah dipahami dari pada program game engine yang ogut buat. Cara membuat game seperti ini akan ogut bahas di artikel berikutnya, tetapi nyicil ya bahasnya karena cukup panjang.



Ok teman-teman sampai di sini dulu, lain waktu ogut sambung lagi untuk membahas teknik atau matematika atau lainnya yang semuanya berhubungan dengan program grafik dan program game.

Salam buat game yuk


Heriady
heriady.yoh@gmail.com




Artikel terkait

Panduan Lengkap Membuat Game Perang Shoot Them Up

Membuat Game Engine Sendiri dengan Visual C++

Membuat Background Game Shoot Them Up

Deteksi Tabrakan dengan Proyeksi Vektor

Jumat, 10 Juli 2015

Membuat Game Engine Sendiri dengan Visual C++

Suatu hari di pagi yang cerah...

Update 1 Jan 2016




Pagi rekan-rekan sekalian, senang sekali rasanya bisa membagi ini ke rekan-rekan sekalian, mbak mbak, kang mas kang mas, adek adek sekalian, agan dan aganwati.

Program kali ini adalah contoh game engine yang ogut buat sendiri, bener asli lho, ogut yang buat...ngak jiplak ato hasil copy paste, kalo kurang yakin tanyain deh ama nyamuk yang nemenin begadang. Sekarang mereka lagi tidur pulas setelah semalem begadangan.

Ok kita mulai aja seriusnya, game ini adalah game bertipe shoot them up ato game tembak aja semuanya sampe abis...ngak peduli yang  penting dor...dor...dor...

Game dibuat dengan bahasa c++ atau tepatnya Visual C++ yang tergabung didalam Visual Studio 2013 Express. Silahkan rekan-rekan mainkan game nya terlebih dahulu, lalu baru coba untuk mempelajarinya. Koding nya agak sedikit advance karena ogut menggunakan OOP  agar program lebih mudah dibuat dan diedit.

Pada artikel kali ini ogut tidak akan membahas cara membuatnya...udah ngantuk pingin cepet istirahat. Tapi proses pembuatannya akan ogut cicil di beberapa artikel, jadi harap bersabar.




Ok teman-teman sampai disini dahulu artikel kali ini nanti lain kali akan ogut lanjutkan pembahasannya, mohom maaf karena masih banyak kekurangan dari program ini.

Update 1 Jan 2016

Contoh game yang lain, Game Shoot Them Up dan Game Jack Onil.



Salam Game Engine


Heriady
heriady.yoh@gmail.com




Artikel terkait

Panduan Lengkap Membuat Game Perang Shoot Them Up

Panduan Lengkap Membuat Game Perang Dengan Game Engine