Dicoding's Blog

062a2112

Membuat Offline Leaderboard di Construct 2

Pembelajaran lengkap dari pembuatan game menggunakan Construct 2 dapat anda pelajari lebih mendalam di Dicoding Academy Belajar Membangun Game HTML5 menggunakan Construct 2 : https://www.dicoding.com/academies/16

Pada artikel kali ini kita akan membahas mengenai Membuat Offline Leaderboard di Construct 2. Leaderboard atau top score list merupakah salah fitur yang biasa digunakan dalam game pada saat ini, ada banyak layanan yang mempermudah pembuatan fitur ini. Namun sayangnya untuk platform Tizen saat ini belum ada layanan Leaderboard yang bisa digunakan seperti Google Play Services pada Google Play Store. Kita bisa membuatnya sendiri dengan menggunakan PHP di server hosting kita sendiri, tapi tentunya tidak semua orang memiliki akses ke server hosting. Nah pada kesempatan kali ini saya akan coba membagikan tips membuat Offline Leaderboard yang bisa langsung anda praktekan. Pada tutorial kali ini Leaderboard akan kita batasi hanya untuk Top 10, artinya hanya 10 nilai tertinggi yang akan disimpan. Player juga memasukan nama sebelum menyimpan nilainya.

Sebelumnya anda dapat mengunduh file tutorial di link berikut. File ini adalah lanjutan dari tutorial sebelumnya mengenai Responsif UI yang bisa anda lihat di link berikut. File game ini sudah saya modifikasi sedikit dengan menambahkan beberapa Layout dan Eventsheet, untuk mempercepat proses belajar kita akan fokus pada pembuatan leaderboard saja.

Pertama yang kita lakukan adalah memasukan object Array kedalam project kita, anda dapat secara bebas memasukan kedalam Layout manapun karena object Array tidak akan ditampilkan secara visual pada Layout.

0001

Setelah memasukan object Array, kita setting terlebih dahulu object Array pada panel Properties.

0002

Kita masukan nilai 10 pada Width karena kita akan menyimpan sebanyak 10 nilai tertinggi, dan kita masukan nilai 2 pada Height karena kita akan menyimpan 2 nilai yaitu skor yang dicapai oleh pemain dan nama pemain.

Jika kita jalankan Debug Layout, maka kita bisa lihat nilai-nilai yang tersimpan pada Array seperti dibawah ini.

0003

Akan ada 10 data dengan semua bernilai 0,0. 0 yang pertama (selanjutnya kita sebut Y index 0) nanti akan kita isi dengan skor pemain dan 0 yang kedua (selanjutnya kita sebut Y index 1) nanti akan kita ganti nialainya dengan nama yang dimasukan oleh pemain.


Menampilkan Nilai Ke Dalam Array

Sekarang kita buka Event Sheet ES_GameOver dan kita masukan event sebagai berikut.

0004

Kita membuat sebuah Function dengan nama “simpanNilai” yang akan dipanggil setiap kali kita menekan Button_Simpan. Berikut adalah penjelasan dari fungsi tersebut.

0005

Pertama kita cek apakah nilai yang akan disimpan lebih besar dari nilai terakhir dari top 10 nilai yang ada, jika benar maka kita lanjut kan dengan menyimpan data. Jika ternyata tidak lebih besar maka kita abaikan. Mungkin menjadi pertanyaan mengapa jika membandingkan nilai terakhir yang seharusnya urutan ke 10 tetapi kita menggunakan angka 9? karena index dalam Array dimulai dari 0, jadi nilai pada urutan ke 10 adalah index ke 9.

0006

Event pada gambar diatas kita gunakan untuk menggantikan nilai terbawah dengan nilai yang baru dengan menggunakan Array: Set at XY.

0007

Set at XY berguna untuk mengubah nilai Array pada index Y yang berada dalam index X.

0008

Disini kita ubah nilai Y index 0 pada index X ke 9 dengan variable “nilai”.

0009

Dan kita ubah nilai Y index 1 pada index X ke 9 dengan variable text yang tertera pada object Text_InputNama.

Saat ini kita sudah memasukan nilai baru kedalam Array, nah mungkin saja nilai baru ini seharusnya berada di peringkat lebih tinggi lagi dan bukan berada diperingkat 10 maka kita harus melakukan sorting ulang seperti pada event digambar berikut ini.

0010

Kita gunakan event Array : Sort pada X axis untuk mengurutkan nilai dari kecil ke besar. Selanjutnya urutan Array kita balik menggunakan Array : Reverse karena kita membutuhkan urutan dari besar ke kecil.

Setelah semua proses selesai Layout kita arahkan ke Layout L_Top10 untuk melihat list 10 besarnya.


Menampilkan Data 10 Nilai Terbesar

Kita buka Event Sheet ES_Top10 untuk membuat event yang akan menampilkan 10 nilai terbesar dan nama player nya.

0013

Tidak banyak event yang digunakan hanya 4 baris event saja untuk menampilkan 10 nama kedalam object Text_Nama dan 10 skor kedalam object Text_Nilai.

0012

Pada saat pertama menampilkan layout yang kita lakukan adalah menghapus semua text yang tertera sebelumnya pada object Text_Nama dan Text_Nilai.

0013

Kita lakukan System : Repeat sebanyak jumlah Array.Width (10 kali) untuk memasukan text demi text. Untuk object Text_Nama kita tambahkan text yang sudah tersimpan sebelumnya dan kita masukan baris baru dengan menggunakan newline, lalu kita masukan nilai Array pada Y index 1 yang menyimpan nama player. Untuk object Text_Nilai kita tambahkan text yang sudah tersimpan sebelumnya dan kita masukan baris baru dengan menggunakan newline, lalu kita masukan nilai Array pada Y index 0 yang menyimpan skor player.

Hasilnya akan tampak seperti gambar berikut ini.

0014

Anda dapat lanjutkan permainan untuk mencoba menambahkan hingga lebih dari 10 nilai tersimpan seperti gambar dibawah ini.

0015

Leaderboard sudah berhasil dibuat, namun sayangnya apabila kita keluar dari game dan kembali lagi maka semua data akan hilang karena belum tersimpan di LocalStorage. Ini akan kita perbaiki dibagian selanjutnya.


Menyimpan Data di LocalStorage

Pertama kita tambahkan object LocalStorage kedalam Layout, anda dapat secara bebas memasukan kedalam Layout manapun karena object LocalStorage tidak akan ditampilkan secara visual pada Layout.

0016

Lalu kita buka lagi Event Sheet ES_GameOver dan kita tambahkan 1 event seperti ini.

0017

Kita set item “Top10” pada LocalStorage dengan nilai Array yang kita sudah ubah menjadi JSON menggunakan Array.AsJSON. Nama “Top10” boleh diganti menggunakan nama lain tapi ingat untuk menggantinya juga di event-event selanjutnya.


Memanggil Data di LocalStorage

Pada file sample2.capx sudah saya tambahkan Layout L_Loading, Layout ini akan kita gunakan untuk melakukan pengecekan data yang tersimpan sebelumnya. Jangan lupa untuk melakukan setting First Layout pada Project Properties untuk menjalankan L_Loading seperti dibawah ini.

0018

Dan pada saat Run Layout pastikan anda aktif di Layout L_Loading untuk memastikan semua berjalan seperti seharusnya.

Sekarang kita buka Event Sheet ES_Loading dan buatlah event seperti berikut.

0019

Rangkaian event tersebut berfungsi seperti ini.

0020

Pada saat kita mulai menjalankan layout kita lakukan pengecekan item “Top10” pada LocalStorage apakah sudah pernah tersimpan sebelumnya. “Top10” boleh diganti dengan nama lain jika kalian inginkan.

0021

Jika ternyata item “Top10” tidak ada maka kita langsung saja beralih ke Layout L_MainMenu dan menggunakan Array kosongan seperti di tutorial sebelumnya.

0022

Namun jika ternyata item “Top10” ada maka kita ambil nilainya dengan menggunakan LocalStorage : Get item.

Setelah nilai item “Top10” berhasil diambil, kita masukan nilainya kedalam Array dengan menggunakan Array : Load from JSON dan mengisi nilainya dengam LocalStorage.ItemValue. Maka kita tidak akan memulai permainan dengan Array kosongan melainkan dengan nilai yang sudah disimpan sebelumnya. Selanjutnya kita pindahkan Layout ke L_MainMenu untuk memulai permainan.

Berikut tadi adalah penjelasan mengenai Membuat Offline Leaderboard di Construct 2 yang sering digunakan jika mengembangkan game menggunakan Construct 2. Semoga penjelasannya bermanfaat dan bisa membantu teman-teman developer untuk mengembangkan karya terbaiknya.

Masih banyak pembahasan menarik di Dicoding Academy Belajar Membangun Game HTML5 menggunakan Construct 2 yang belum kita bahas di sini, untuk pembahasan lebih jauh silakan kunjungi Academy (Belajar Membangun Game HTML5 menggunakan Construct 2). Jika ada pertanyaan, saran atau masukan jangan sungkan untuk menuliskannya di kolom komentar.

Selamat belajar, semoga bermanfaat, dan nantikan tutorial pembuatan game menggunakan Construct 2 selanjutnya.

Share this:

Leave a comment