Hindari Crash VXAce Karena Memory Leak & Object Undisposed
Original Link : http://13th-info.blogspot.com/2013/12/menghindari-crash-vxace-karena-memory.htmlSiapa yg sering ketemu crash dengan bentuk error seperti itu? Sedikit orang? Banyak orang? Penyebab crash seperti itu ditentukan oleh banyak faktor, seperti VXAce yang diinstal bukan versi officialnya (hasil crackan, tapi yg ini jarang seh), atau karena kesalahan dari program itu sendiri (seperti script yang tidak diprogram dengan benar). Disini saya akan mengajarkan kalian sekaligus memberi informasi tentang crash di VXAce dengan bentuk error seperti itu dan bagaimana solusi yg tepat untuk mengakalinya. Tapi yang saya ajarkan kali ini hanya crash karena kesalahan script yang tidak diprogram dengan benar.
Main Crash ReasonScript yang tidak diprogram dengan baik oleh scripternya, lama kelamaan akan melahirkan crash di VXAce, dan terkadang scripter itu sendiri tidak tau dimana letak kesalahannya karena VXAce tidak berhasil mendetailnya (contohnya seperti error diatas, apakah kalian sendiri mengerti kesalahan sebenarnya dari sisi program atau dari sisi scriptnya). Salah satu crash yang cukup umum dan biasanya scripter luput dari penyebab ini (dan sayapun juga salah satunya yang luput) adalah
OBJEK SPRITE YANG TIDAK DIDISPOSE DENGAN BENAR. Objek Sprite tidak sama dengan Window yang ketika keluar dari scene tersebut/viewportnya hilang maka objeknya juga ikut hilang. Objek Sprite
HARUS PUNYA METODE DISPOSE UNTUK DIRINYA SENDIRI (biasanya kalo didalam class ada def dispose atau ga def terminate, disitulah tempat yang tepat untuk meletakkan fungsi dispose untuk objek Sprite). Perlu diketahui bahwa objek Sprite tetap tinggal di memory ketika Sprite tidak didispose dengan benar walaupun secara ketampakan sudah tidak ada lagi dilayar. Hal ini bisa membuat adanya penumpukan objek yang tidak digunakan lagi di memory (Garbage Collector sepertinya gagal dibagian ini) yang bisa menuju ke crashnya Game.exe itu sendiri.
Identifying The Crash ReasonAlasan kenapa VXAce bisa crash seperti itu sudah ditau. Sekarang darimana asal crash tersebut? Untungnya ada seorang scripter disana yang berhasil membuat script untuk mendetail bagian mana saja dari script yang kita pake yang bakal melahirkan crash tersebut. Scriptnya adalah Graphical Object Global Reference VX ACE yang bisa didapatkan disini. Kita akan menggunakan script tersebut sebagai debug lognya biar kita tau dimana letak kesalahan scriptnya.
PreparationSekarang saatnya ujicoba script yang bisa mengarahkan kita ke crash seperti itu. Kita akan coba dengan script saya sendiri TroyZ - Loading [VXAce] Version 1.0
. Ternyata script saya sendiri saya tidak program dengan benar.
#oh_god_why
ExecutionSeperti biasa, sekarang coba jalankan sebuah project dengan script saya berada didalamnya. Fungsikan script tersebut.
Yah masih berjalan dengan normal projectnya kan? Sekarang saatnya saya memasang script debug tersebut. Pasang script debug tersebut dibawah dari script loading milik saya.
Sekarang saatnya testplay.
- Quote :
- Hey padahal loadingnya sudah selesai, tapi gambarnya tetap ada disana.
Ya itu salah satu kesalahan saya dalam menulis script ini. Saat saya kembali ke scene sebelumnya, saya lupa untuk mendispose objek Sprite yang ada di scene tersebut
(bodohnya saya ini). Nah sekarang solusinya, liat di file gobj.txt yang ada di project kamu (file ini muncul ketika menggunakan script debug tersebut, isinya adalah log tentang apa2 saja yang bakal membuat Game.exe crash).
Lihatlah line script yang didetail di gobj.txt . Ada create_background, draw_loading_text, draw_loading_base, draw_loading_bar. Semua line yang disebutkan itu adalah line dimana objek Sprite dibuat, dan ketika keluar dari scene, objek Sprite tersebut tidak didispose. Sekarang saatnya mengedit script tersebut agar objek Sprite saat keluar dari scene bisa terdispose dengan benar. Buka script editor, tambahkan baris seperti ini sebelum end dari scene loading.
@text, @background_sprite, @load_base, @load_bar, itu semua adalah variabel yang menyimpan objek Sprite. Sekarang testplay lagi project kamu, tapi jangan lupa sebelum testplay, hapus dulu file gobj.txt yang tadi sudah ada. Jika file gobj.txt yang dihapus tadi sudah tidak muncul lagi saat testplay, berarti kamu sudah berhasil menggagalkan crash di VXAce yang disebabkan kesalahan script yang tidak diprogram dengan baik (sebenarnya kesalahan saya seh, kan saya yang buat scriptnya sampe gaje kaek gitu
).
ConclusionIni cuma salah satu dari sekian banyaknya penyebab crash di Game.exe milik VXAce yang berhasil digagalkan. Script debug milik Mithran tersebut sebenarnya punya metodenya sendiri untuk menggagalkan crash, tapi dari beberapa kesempatan script debug tersebut tidak berhasil karena penyebab crash bukan berasal dari script. Bisa diliat di FAQ yang ada di postnya di RMW.
- Quote :
- Q: Game.exe crashes for me constantly and this didn't help!
A: As explained, this only prevents Game.exe crashes caused by the specific set of circumstances outlined. Crashes caused by memory faults or other errors may still remain, but if there is an in-game reason for it (read: crashes happen after x set of actions are taken with a fair degree of consistency, or across several computers) feel free to leave a post here.
Jadi sebagai scripter, penggunaan objek Sprite harus benar-benar dikondisikan dengan baik (jangan seperti saya, kembali scene malah Sprite ditinggalin
). Belajarlah dari kesalahan, dari sanalah kalian akan menemukan pengalaman yang akan mengajarimu lebih.
Sekian artikel dari saya, semoga bermanfaat.