Membuat game sokoban dengan defold part 4

Halo..

Balik lagi lanjutin tutorial buat game pake defold. Sekarang akan kita buat gameobject pake factory.

Di dokumentasi defold manual, factory digunakan untuk membuat gameobject pada game yang berjalan.

catatan

Oh iya, artikel ini ada versi video juga. Jika tertarik buat nonton videonya bisa di cek link youtube ini. Dan mungkin artikel dengan video ada perbedaan sedikit, tetapi punya tujuan dan makna yang sama

Membuat Gameobject Player

Karena sebelumnya gameobject itu berada pada main.collection, maka disini saya memindahkan dengan membuat folder go dan meletakan player.go sebagai gameobject yang nantinya akan dipangil di dalam game.

buat folder go didalam main

setelah itu membuat mencopy component player gameobject ke dalam player.go

player.go

Menyiapkan Factory

Kembali lagi ke main.collection lalu didalam collectionnya kita akan membuat gameobject dengan nama factory dimana didalamnya akan ada factory component. Lalu pada prototype masukan player.go kedalam factory tersebut.

factory go dengan component factory

Mungkin akan sedikit membingungkan bagi kalian yang sebelumnya pernah menggunakan game engine lain / game framework. Tapi memang ini konsep yang di usung oleh defold. Dimana setiap object instance yang ingin di pangil mereka membutuhkan factory component didalamnya.

Ubah Tilemap

Kita ubah tilemap kita terlebih dahulu dengan menambahkan layer baru, yang saya beri nama setup dan layer ini digunakan untuk tanda object baru yang ingin saya tampilkan / spawning.

layer-setup di level tilemap

Layer dengan nilai tilemap 74 adalah tanda posisi player. Nantinya player akan di pangil kedalam game disitu.

Membuat game object controller

Disini saya akan menggunakan controller sebagai controller dari main.collection itu sendiri. Seperti spawning player.go, dan semua yang berhubungan melakukan kontrol terhadap collection saya akan melewati gameobject controller.

Lalu masukan script seperti dibawah.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
local function map_position(x, y)
return vmath.vector3(x*64-32, y*64-32, 0.3)
end

local function setup_map(self)
local x, y, w, h = tilemap.get_bounds("map#level1")

for ix = x, x+w-1 do
for iy = y, y+h-1 do
local player_map = tilemap.get_tile("map#level1", "setup", ix, iy)

if player_map == 74 then
local p_pos = map_position(ix, iy)
local player = factory.create("/factory#factory", p_pos)
tilemap.set_tile("map#level1", "setup", ix, iy, 0)
end
end
end
end


function init(self)
setup_map(self)
end

Script diatas menjadi 3 fungsi, yaitu map_position dimana, disini saya mebalikan return dari tilemap yang dimasukan akan mengembalikan position dari position pixel layar.

setup_map fungsi dimana kita akan melakukan checking setiap tilemap yang ada di sana, dan tile yang bernilai 74 akan memanggil factory component buat spawing objectnya. Selain itu akan mengubah tile 74 tersebut menjadi 0, atau nilainya di reset.

dan fungsi init hanya memanggil fungsi dari setup_map.

Testing

Sekarang setelah selesai, kita testing kembali. Klo tidak ada error kalian akan melihat tampilan yang sama seperti sebelumnya. Oh iya, memang secara tampilan tidak ada yang berubah dari yang sebelumnya, tetapi collection yang sekarang akan kita perbanyak untuk level-level selanjut.

Penutup

Tidak banyak yang dilakukan hari ini, hanya membuat gameobject baru dengan factory component, dan memanggil factory component tersebut untuk spawn player. Tetapi Hal tersebut akan berguna untuk pembuatan game kedepanya.

Okeh sekian dari saya, jika ada pertanyaan ataupun kendala terhadap tutorial diatas, kalian bisa comment disini ataupun di youtubenya.