Di dalam sebuah game, tentunya ada sebuah atau beberapa Object. Ketika sebuah Object ditempatkan di sebuah room, ternyata Object tersebut memiliki sebuah id unik walaupun masih satu Object. id inilah yang merepresentasikan sebuah Instance.
Kita pasti sudah tak asing dengan yang namanya Object. Namun mungkin beberapa diantara kalian ada yang masih bingung apa itu Instance.
Secara umum, Instance adalah sebuah Object individu. Dengan mengakses sebuah Object kita otomatis juga mengakses Instance dari Object tersebut.
Contohnya ada sebuah object obj_monster. obj_monster ini ditempatkan di dalam sebuah room sebanyak 3 kali. Maka, di dalam room tersebut terdapat 3 buah Instance dan 1 buah Object yaitu obj_monster.
Perhatikan gambar di atas! Jika diperhatikan, di dalam room tersebut terdapat 2 buah Object dan 5 buah Instance.
FUNGSI INSTANCE PADA GAME MAKER:STUDIO
Di dalam GAME MAKER:STUDIO sendiri ada beberapa fungsi yang berkaitan dengan Instance. Fungsi ini menurutku sangat usefull banget jika kita ingin membuat banyak karakter game tanpa harus membuat banyak Object. Fungsi-fungsi tersebut diantaranya adalah sebagai berikut.
-
instance_create(x, y, obj);
Fungsi dari instance_create adalah untuk membuat Instance baru dari sebuah Object. Fungsi ini akan menghasilkan id yang bisa digunakan untuk fungsi lainnya. instance_create memiliki 3 argument yaitu posisi x, posisi y dan Object yang akan dibuat.
Contoh penggunaannya adalah sebagai berikut.
Createmonster = instance_create(64, 64, obj_monster);
-
instance_destroy();
Fungsi dari instance_destroy adalah untuk menghapus Instance di dalam room. Fungsi ini tidak memiliki argument dan hanya berlaku untuk Instance itu sendiri, jika ingin menghilangkan Instance tertentu bisa menggunakan with untuk mengaksesnya.
Contoh penggunaannya adalah sebagai berikut.
press <delete>with(monster){
instance_destroy();
}
-
instance_exists(obj);
Fungsi dari instance_exists adalah untuk mengecek apakah suatu Instance ada atau tidak di dalam room. Fungsi ini akan menghasilkan nilai true apabila instance ada dan false apabila tidak ada. Fungsi ini memiliki satu argument yaitu Object yang ingin dicek keberadaannya.
Contoh penggunaannya adalah sebagai berikut.
Createmonster = instance_create(64, 64, obj_monster);
if(instance_exists(monster)) show_message("Instance ada");
else show_message("Instance tidak ada");
-
instance_change(obj, perf);
Fungsi dari instance_change adalah untuk merubah suatu Instance menjadi Instance Object lain. Fungsi ini memiliki 2 argument yaitu Instance yang ingin diubah dan perform event bernilai true apabila ingin mengikutkan event Create dan event Destroy atau false apabila tidak ingin mengikutkannya.
Contoh penggunaannya adalah sebagai berikut.
press <space>with(monster){
//Merubah ke obj_pet
instance_change(obj_pet, true);
}
-
instance_number(obj);
Fungsi dari instance_number adalah untuk memperoleh jumlah semua Instance suatu Object. Fungsi ini memiliki sebuah argument yaitu Object yang akan dihitung jumlah Instance-nya.
Contoh penggunaannya adalah sebagai berikut.
Createmonster1 = instance_create(64, 128, obj_monster);
monster2 = instance_create(128, 256, obj_monster);
monster3 = instance_create(96, 384, obj_monster);
count = instance_number(obj_monster); //Menghitung jumlah obj_monster
show_message("Jumlah monster= " + string(count));
-
instance_find(obj, n);
Fungsi dari instance_find adalah untuk mencari dan menghasilkan Instance yang ke-n. Fungsi ini memiliki 2 argument yaitu Object yang akan dicari dan urutan nomor index n yang dimulai dari 0.
Contoh penggunaannya adalah sebagai berikut.
Createmonster1 = instance_create(64, 128, obj_monster);
monster2 = instance_create(128, 256, obj_monster);
monster3 = instance_create(96, 384, obj_monster);
cari = instance_find(obj_monster, 1); //mencari instance index ke-1 (monster2)
with(cari){
image_alpha = 0.5;
}
-
instance_nearest(x, y, obj);
Fungsi dari instance_nearest adalah untuk mencari Instance paling dekat dengan posisi tertentu. Fungsi ini memiliki 3 argument yaitu posisi x dan posisi y serta Object yang akan dicari.
Contoh penggunaannya adalah sebagai berikut.
Createmonster1 = instance_create(64, 128, obj_monster);
monster2 = instance_create(128, 256, obj_monster);
monster3 = instance_create(96, 384, obj_monster);
cari = instance_nearest(0, 0, obj_monster); //mencari instance yang paling dekat dengan posisi 0, 0
with(cari){
image_alpha = 0.5;
}
-
instance_furthest(x, y, obj);
Fungsi dari instance_furthest adalah kebalikan dari yang tadi, yaitu untuk mencari Instance paling jauh dengan posisi tertentu. Fungsi ini memiliki 3 argument yaitu posisi x dan posisi y serta Object yang akan dicari.
Contoh penggunaannya adalah sebagai berikut.
Createmonster1 = instance_create(64, 128, obj_monster);
monster2 = instance_create(128, 256, obj_monster);
monster3 = instance_create(96, 384, obj_monster);
cari = instance_furthest(0, 0, obj_monster); //mencari instance yang paling jauh dengan posisi 0, 0
with(cari){
image_alpha = 0.5;
}
-
instance_position(x, y, obj);
Fungsi dari instance_position adalah untuk mencari Instance pada posisi tertentu. Fungsi ini memiliki 3 argument yaitu posisi x dan posisi y serta Object yang akan dicari.
Contoh penggunaannya adalah sebagai berikut.
Createmonster1 = instance_create(64, 128, obj_monster);
monster2 = instance_create(128, 256, obj_monster);
monster3 = instance_create(96, 384, obj_monster);
cari = instance_position(128, 256, obj_monster); //mencari instance pada posisi 128, 256
with(cari){
image_alpha = 0.5;
}
Demikian adalah beberapa dari fungsi Instance yang dapat saya jelaskan. Untuk fungsi yang lebih lengkap bisa dilihat disini.
PENGGUNAAN FUNGSI INSTANCE
Fungsi Instance umumnya digunakan sebagai seleksi pada suatu Object di dalam sebuah game. Karena hal tersebut, fungsi Instance sering diterapkan dalam membuat sistem AI (Artificial intelligence).
Terkadang saya sering membuat banyak Object dengan Sprite berbeda yang memiliki property (variable) yang sama namun dengan value yang berbeda. Dengan pengetahuan yang kita dapat kali ini, sebetulnya cukup sebuah Object saja, kita bisa membuat beberapa karakter musuh.
Misalnya saja kita akan membuat Object musuh dengan level berbeda. Kita tidak perlu membuat beberapa Object seperti obj_musuh_0, obj_musuh_1, obj_musuh_2, obj_musuh_3, dst. Tetapi kita cukup membuat sebuah object saja obj_musuh. Namun, kita tetap membutuhkan sebuah Object untuk mengontrol value dari obj_musuh tersebut. Tentu saja hal ini hanya bisa dilakukan apabila property pada obj_musuh sama.
Sebagai gambaran konsep di atas, kita akan mencoba menerapkannya dengan code pada GAME MAKER:STUDIO. Anggap saja sama seperti studi kasus.
Jika property pada obj_musuh seperti ini.
Create
darah = 0;
serangan = 0;
senjata = spr_pedang; //Hanya contoh
mungkin code yang bisa diterapkan pada Object yang mengontrol obj_musuh seperti berikut.
Create
//Memunculkan 5 musuh secara acak dan mengatur property musuh
randomize();
for(i=0;i<5;i++){
pos_x = random(room_width);
pos_y = random(room_height);
while(!place_empty(pos_x, pos_y)){
pos_x = random(room_width);
pos_y = random(room_height);
}
musuh = instance_create(pos_x, pos_y, obj_musuh);
musuh.darah = 100;
musuh.serangan = irandom_range(50, 100); //Acak antara 50 sampai 100
musuh.senjata = spr_pedang;
}
Sedangkan pada obj_musuh, kita bisa membuat AI sederhana seperti ini.
Step
if(distance_to_object(obj_player) < 96){ //Jika jarak kurang dari 96px
senjata = spr_pedang; //Mengubah senjata
}
else{
senjata = spr_tembak; //Mengubah senjata
}
Dengan cara seperti itu, kita tidak perlu membuat banyak Object untuk musuh. Kita bahkan bisa melakukan hal yang lebih banyak lagi. Contohnya jika kita ingin menambahkan serangan pada obj_musuh yang darahnya kurang dari 20. Kita bisa lakukan hal tersebut pada Object lain tanpa harus memberikan perintah pada obj_musuh secara langsung seperti pada code berikut ini.
Step
for(i=0;i<instance_number(obj_musuh);i++){
musuh = instance_find(obj_musuh, i);
if(musuh.darah <= 20){
musuh.serangan = 200;
}
}
PENUTUP
Demikianlah postingan Mengenal Instance pada GAME MAKER:STUDIO, saya sudah menjelaskan sedikit pengertian dan kegunaan dari Instance dan fungsinya. Silahkan diambil kesimpulan masing-masing. Intinya Instance ini tidak sama dengan Object. Beberapa Instance bisa memiliki object_index yang sama.
Untuk postingan selanjutnya, saya akan membuat sebuah tutorial yang akan berhubungan dengan Instance ini.
Semoga dari postingan ini dapat diambil ilmunya dan jika ada kata-kata atau code yang kurang tepat mohon maaf. Jika ada kritik saran atau hal yang kurang jelas, silahkan berkomentar.