Kamis, 10 November 2016

Contoh cara membuat fungsi Save & Load game pada GDevelop.


Fungsi Save (menyimpan) dan Load (memuat) dalam sebuah game sangat penting. Hampir seluruh game modern memilikinya, entah itu untuk menyimpan kemajuan dari pemain, misalnya jumlah nyawa, level yang sudah dicapai dan lain-lain, atau hanya sekedar menyimpan nilai skor tertinggi saja seperti dalam game Flappy Bird.

Dalam artikel ini, saya akan mencoba memberikan contoh membuat fungsi Save dan Load sederhana, namun cukup baik untuk digunakan dalam sebuah game.
Untuk membuat fungsi Save dan Load, yang dibutuhkan hanyalah action "Read" dan "Write" dalam folder "Storage". Fungsi Read and Write ini akan menulis data yang ingin anda simpan ke sebuah berkas dalam komputer pemain dan hanya bisa diakses oleh game tersebut.

Catatan: Tutorial kali ini untuk tingkatan menengah, anda dapat membaca Tutorial GDevelop Bahasa Indonesia untuk pemula terlebih dahulu di bawah ini agar dapat mengikuti tutorial ini tanpa kebingungan.
Buat sebuah projek baru, tambahkan 2 scene baru hingga ada 3 scene dalam projek tersebut. Beri nama "judul" untuk scene pertama, scene ini nantinya akan tampil pertama kali pada saat game dimulai dan memiliki 2 pilihan yaitu mulai permainan baru atau melanjutkan yang sudah disimpan. Beri nama "level 1" pada scene kedua dan "level 2" pada scene ketiga.

Edit scene "judul", tambahkan 1 buah objek text dan beri tulisan "Mulai Baru" (atau new game, terserah anda), dan tambahkan 1 objek text lagi lalu beri tulisan "Lanjutkan" (atau continue, atau load). Kita akan membuat tulisan itu bisa di klik oleh pemain.

Buka event editor scene "judul", tambahkan 1 event, "Add a condition", buka "Mouse and touch", pilih "Mouse button released". Pada bagian kanan, klik tombol kecil bergambar mouse dan pilih "Left button", klik Ok untuk menutup window.
Kita tidak ingin jika setiap saat tombol kiri mouse diklik, game akan menanggapi meski posisi mouse tidak berada pada tempat yang seharusnya bisa diklik. Untuk itu kita menambahkan sebuah condition pada event beru tersebut, yang membatasi tanggapan game pada klik mouse pemain.
"Add a condition" di bawah condition di atas, buka folder "Mouse and touch", pilih "The cursor/touch is on an object". Pada bagian kanan, pilih objek text "Mulai baru" (atau new game) lalu klik Ok untuk menutup window.

"Add an action" pada event baru tersebut, buka folder "Variables", buka folder "Global variables" dan pilih "String of a global variable". Pada bagian kanan, klik tombol di sebelah kotak "Variable", jika anda belum pernah menambahkan satupun global variable, window  "Choose a variable" akan kosong. Klik + pada window tersebut untuk menambahkan 1 global variable baru, beri nama "level_name", klik Ok lalu pilih variable baru tersebut dan klik tombol "Choose".
Beri tanda = pada "Modification's sign", dan ketik "level 1" (dengan tanda kutip) pada kotak "Text". Klik Ok untuk menutup window.

"Add an action" lagi di bawah action yang baru dibuat, buka folder "Variables", buka folder "Global variables" dan pilih "Value of a global variable". Pada bagian kanan, klik tombol variable. Pada window "Choose a variable" yang muncul, klik + untuk menambahkan variable baru, beri nama "char_x" dan klik Ok. Pilih variable baru tersebut lalu klik Ok. Beri tanda = untuk "Modification's sign" dan beri nilai 32 pada kotak "Value". Klik Ok untuk menutup window "Edit the action".

"Add an action", buka folder "Variables", buka folder "Global variables" dan pilih "Value of a global variable". Pada bagian kanan, klik tombol variable. Pada window "Choose a variable" yang muncul, klik + untuk menambahkan variable baru, beri nama "char_y" dan klik Ok. Pilih variable baru tersebut lalu klik Ok. Beri tanda = untuk "Modification's sign" dan beri nilai 32 pada kotak "Value". Klik Ok untuk menutup window "Edit the action".

"Add an action" sekali lagi, buka folder "Scene" dan pilih "Change the scene". Pada bagian kanan, klik tombol txt. Pada window "Edit the text" yang muncul, buka folder "Variables", dobel klik pada "Global variables" lalu pilih variable "level_name" dari daftar variable dan klik Ok untuk menutup window. Pada kotak teks harus nampak tepat seperti ini:

Gambar 1
Jika ada tanda kutip dan atau lain sebagainya pada teks, hilangkan saja. Klik Ok untuk menutup window "Edit the text" ini. Pada kotak "Stop any other paused scenes?" klik tombolnya dan pilih "Yes" pada window kecil yang muncul. Klik Ok untuk menutup window "Edit the action".
Jika semuanya benar, maka event editor anda akan nampak seperti ini sekarang:

Gambar 2
Fungsi dari event ini adalah menanggapi klik kiri pada tulisan (atau tombol) "Mulai baru" dengan mengatur semua global variable ke nilai bakunya lalu mengganti scene ke "level 1"

Kemudian kita akan menambahkan event yang menanggapi klik kiri pada tulisan "Lanjutkan". Buatlah 1 event baru, lalu isi "Add a condition" seperti yang dilakukan pada event untuk tulisan "Mulai baru" di atas, bedanya sekarang objek yang di klik adalah objek text "Lanjutkan".
Pada bagian action, isinya sedikit berbeda dengan event "Mulai baru" di atas, karena disini kita akan mencoba membaca data dari berkas dan mengubah global variable sesuai dengan isi data tersebut.

"Add an action" pada event yang baru anda buat, buka "Storage" lalu pilih "Read a value". Pada bagian kanan, ketik "save" (dengan tanda kutip) pada kotak "File", ini akan membuat berkas dengan nama "save" secara otomatis jika belum ada. Ketik "xpos" (dengan tanda kutip) pada kotak "Group" dan klik tombol di sebelah kotak "Scene variable". Buat sebuah variable dengan nama "xpos" (tanpa tanda kutip) jika belum ada dan pilih variable tersebut lalu klik Ok untuk menutup window "Choose a variable". Lalu klik Ok untuk menutup window "Edit the action".

Buat sebuah action baru seperti di atas, namun sekarang beri nama "ypos" pada nama "Group" dan pada nama variablenya.

"Add an action" lagi, buka folder "Storage" dan pilih "Read a text". Berbeda dengan "Read a value" yang dipakai di atas, fungsi ini membaca teks pada data, bukan nilai angka seperti di atas. Pada bagian kanan, ketik "save" pada kotak "File", ketik "levelname" pada kotak "Group" dan klik tombol "Scene variable". Pada window "Choose a variable", klik + untuk menambah variable baru, beri nama "Lname", pilih variablenya dan klik tombol "Choose" untuk menutup. Klik Ok untuk menutup window "Edit the action" dan kembali ke event editor.

Sekarang kita harus memodifikasi isi dari global variables yang sudah kita buat sebelumnya pada event ini. Seperti yang kita tahu, global variable dapat diakses dari mana saja dalam sebuah game.
"Add an action" di bawah action "Read levelname..." yang barusan dibuat, buka folder "Variables", buka folder "Global variables" dan pilih "String of a global variable". Pada bagian kanan, pilih global variable "level_name", beri = pada "Modification's sign" dan klik tombol txt. Bersihkan dulu kotak teks besar, lalu buka folder "Variables" dan dobel klik "Scene variables" dan pilih variable "Lname" dari daftar variables, lalu klik Choose untuk menutup window tersebut kemudian klik Ok untuk menutup window.
"Add an action", buka folder "Variables", buka folder "Global variables" dan pilih "Value of a global variable". Pada bagian kanan, pilih variable "char_x", beri tanda = pada "Modification's sign" dan pilih variable "xpos" dari "Scene variables" seperti langkah di atas. Klik Ok untuk menutup window.

Lakukan "Add an action" sekali lagi seperti di atas, namun kali ini pilih "char_y" untuk global variables dan "ypos" untuk scene variables nya.

"Add an action" sekali lagi untuk menambah perintah berganti scene sesuai dengan data dari file penyimpanan. Buka folder "Scene" dan pilih "Change the scene". Pada bagian kanan, pilih global variable "level_name" untuk kotak "Name of the new scene" dan pilih Yes untuk kotak "Stop any other paused scenes?". Klik Ok untuk menutup windownya.

Jika semuanya sudah anda lakukan dengan benar, maka event editor anda akan nampak seperti ini (Abaikan event dengan warna kuning, itu hanya keterangan (comments) saja):

Gambar 3
Langkah selanjutnya adalah menyunting scene "level 1". Buat 1 buah objek "Sprite", beri behavior "Top down movement" dan ganti nama objek tersebut menjadi "player". Objek ini dapat bergerak ke segala arah dengan menggunakan tombol panah.
Buat lagi 1 objek "sprite", beri nama "pintu". Tidak perlu menambahkan behavior untuk objek ini.
Buat 2 buah objek Text, ganti nama dan tulisan mereka menjadi "keluar" dan "simpan".

Buka event editor scene "level 1" ini, tambahkan sebuah event, "Add a condition", buka folder "Scene" dan pilih "At the beginning of the scene" lalu klik Ok. "Add acondition", buka folder "All objects", buka folder "Position" dan pilih "Position of an object". Pada bagian kanan, pilih objek "player", lalu pilih global variable "char_x" dan "char_y" masing-masing untuk kotak "X position" dan "Y Position", beri tanda = untuk kedua kotak "Modification's sign", lalu klik Ok untuk menutup window dan kembali ke event editor.

Tambahkan event baru untuk menangani kondisi saat objek player menyentuh objek pintu dan mengganti scene ke "level 2". "Add a condition", buka folder "All objects", buka folder "Collision" dan pilih "Collision". Pada bagian kanan pilih objek "player" dan objek "pintu". Klik Ok.
"Add an action", buka folder "Variables", buka folder "Global variables" dan pilih "Value of a global variable". Pada bagian kanan, pilih global variable "char_x", beri tanda = pada "Modification's sign" dan beri nilai 96 untuk kotak "Value". Klik Ok untuk menutup.
Lakukan sekali lagi, kali ini pilih "char_y" pada kotak "Variables" dan beri nilai 32 pada kotak "Value".
"Add an action" sekali lagi, buka folder "Scene" dan pilih "Change the scene". Pada bagian kanan, ketik "level 2" pada kotak "Name of the new scene" dan pilih Yes untuk "Stop any other paused scenes?". Klik Ok.

Tambahkan event untuk menangani kondisi saat pemain mengklik tulisan "keluar". "Add a condition", buka folder "Mouse and touch" lalu pilih "Mouse button released". Pada bagian kana pilih "Left mouse button" untuk kotak "Button to test" lalu klik Ok.

"Add a condition" sekali lagi, buka folder "Mouse and touch" lalu pilih "The cursor/touch is on an object". Pada bagian kanan pilih objek text "keluar", lalu klik Ok.
Sekarang kita tambahkan action yang diambil untuk conditions di atas. "Add an action", buka folder "Scene" dan pilih "Change the scene". Pada bagian kanan, pilih scene "judul" dan Yes untuk kotak "Stop any other paused scenes?". Klik Ok.

Terakhir kita tambahkan event untuk menangani kondisi saat pemain mengklik tulisan "simpan". Caranya sama dengan di atas, namun yang beda adalah nama objek yang di klik dan isi dari kolom Action nya.
"Add an action", buka folder "Storage" lalu pilih "Write a value". Pada bagian kanan, ketik "save" (dengan kutip) pada kotak "File", ketik "xpos" (dengan kutip) pada kotak "Group" dan ketik "player.X()" (tanpa kutip, dan perhatikan huruf besar kecilnya) pada kotak "Expression" dan klik Ok untuk menutup window.
Lakukan sekali lagi, kali ini ketik "ypos" pada kotak "Group" dan "player.Y()" pada kotak "Expression".

"Add an action" lagi, buka folder "Storage" dan sekarang pilih "Write a text". Pada bagian kanan, ketik "save" (dengan kutip) untuk kotak "File", ketik "levelname" (dengan kutip) untuk kotak "Group" dan ketik "CurrentSceneName()" (tanpa kutip, dan perhatikan huruf besar kecilnya) pada kotak "Text" dan klik Ok untuk menutup window.

Maka sekarang keseluruhan event editor scene "level 1" akan nampak seperti ini (abaikan event berwarna kuning):

Gambar 4. Event editor level 1
Untuk event pada scene "level 2" hampir seluruhnya sama dengan event scene "level 1", bedanya hanya target scene pada saat objek "player" bersentuhan (Collision) dengan objek "pintu" saja, jika pada level 1 "Change the scene" ke level 2, maka pada level 2 "Change the scene" ke level 1, juga nilai char_x pada event level 2 bernilai 480.

Gambar 5. Event editor level 2
Setelah semuanya selesai, anda dapat mencoba menjalankan game, gerakkan objek "player" kemanapun, sentuh objek "pintu" untuk berpindah level lalu coba anda klik tulisan "simpan", lalu klik tulisan "keluar" untuk kembali ke layar pertama. Jika anda tidak membuat kesalahan, maka saat anda klik tulisan "Lanjutkan", game akan memuat data dan mengembalikan objek "player" ke posisi dan level disaat terakhir anda simpan permainannya.

Anda dapat mengunduh file project untuk tutorial ini disini, silahkan anda pelajari dan kembangkan.

Demikian ulasan cara membuat fitur Save & Load pada GDevelop, semoga bermanfaat untuk kita semua. Nantikan tulisan-tulisan berikutnya dari Otak Berlubang.

Terima kasih! :)

Tidak ada komentar :

Posting Komentar