Per 2016, RMID pindah ke RMID Discord (Invite link dihapus untuk mencegah spambot -Theo @ 2019). Posting sudah tidak bisa dilakukan lagi.
Mohon maaf atas ketidaknyamanannya dan mohon kerjasamanya.

Share | 
 

 [Ace]Understanding Workflow

Topik sebelumnya Topik selanjutnya Go down 
[Ace]Understanding Workflow Empty2013-01-25, 03:35
Post[Ace]Understanding Workflow
#1
Heartbreak61 
Novice
Novice
avatar

Level 5
Posts : 177
Thanked : 4
Engine : RMVX Ace
Skill : Very Beginner
Type : Event Designer

[Ace]Understanding Workflow Vide
Don't misunderstand all this. It's not like i'm posting this tutorial for you or anything. i'm just bored... Baka!! (HBK61 Tsundere mode)

Ehm, sebelum memulai, saya berasumsi bahwa agan2 yang baca ini sudah paham dasar-dasar ruby seperti method, module, class, hierarchy, instances, variables, comparable, dll, namun masih bingung tentang bagaimana workflow dari RMVX Ace.

Tutorial ini mungkin kurang berguna bagi pengguna VX karena VX tidak menggunakan module-module tertentu seperti SceneManager dan BattleManager. Akan tetapi, tidak ada salahnya juga membaca tutorial ini karena secara garis besar, workflow VX dan VX Ace tidak jauh berbeda.

Untuk sementara, tutorial ini hanya akan menjelaskan prosedur dari awal game dimulai sampai dengan Scene Title selesai diproses.




Kembali ke topik, silakan buat new project, tekan F11, dan lihat di "Main"
Code:
rgss_main { SceneManager.run }
kode di atas adalah akar dari semua permasalahan dari engine RMVX Ace. Apabila line tersebut dihapus, maka semua masalah juga akan hilang (baca: no game at all :hammer:)

Awal dari semua (default) game Ace adalah menjalankan method "run" dari module SceneManager. Mari kita lihat sebagian isi dari module tersebut.
Spoiler:
method run itu berfungsi untuk:
- Menjalankan method init dari module Data_Manager <= intinya sih buat nge-load database dari folder Data
- Menjalankan method setup_midi dari module Audio <= baca di help file
- Mendeklarasikan variable @scene sebagai sebuah instance dari method first_scene_class
- Menjalankan method main dari variable @scene

method first_scene_class merupakan conditional.
Jika $BTEST maka first_scene_class adalah Scene_Battle.
Jika bukan, maka first_scene_class adalah Scene_Title

$BTEST akan diset "true" secara otomatis saat kita menjalankan Battle Test dari tab Troop. Dengan asumsi yang kita jalankan adalah default play test (F12) maka secara garis besar dapat dikatakan bahwa:
Code:
@scene = Scene_Title.new
@scene.main

*)RMVX Ace menggunakan Array @stack untuk mengatur posisi hierarchy scene. Saat sebuah scene dipanggil menggunakan method call, maka current scene akan di push ke dalam array tersebut sehingga saat method return_scene di call dari scene yang baru dibuat, dia akan mengambil kembali scene terakhir dari @stack. (<< saya sendiri bingung gimana jelasinnya ya :hmm:)
Untuk lebih jelasnya pake perumpamaan aja deh
Spoiler:

Sekarang mari kita lihat di class Scene_Title, tekan ctrl + F dan ketik "def main".
whaddehel? kok ga ada method main di Scene_Title? :hammer:

Tenang, jangan panik... Coba lihat dulu baik-baik
Code:
class Scene_Title < Scene_Base
Nah, karena di Scene_Title tidak ada method main, maka coba kita lihat di Scene_Base
Spoiler:
Saya hanya akan menjelaskan secara garis besar apa yang dikerjakan oleh method main ini.
- membuat @viewport dengan z=200. Dari hasil penerawangan sekilas, saya melihat bahwa viewport ini nantinya akan digunakan sebagai viewport untuk sebagian besar class Window seperti Window_Menu, Window_Message, dll.
- melakukan transisi dari scene sebelumnya untuk 10 frame
- meng-update Graphics, Input, dan Windows sampai scene tersebut selesai. Perlu diperhatikan bahwa method update perlu diperlakukan dengan hati-hati karena method ini merupakan sebuah loop yang hanya akan berakhir saat scene itu selesai.
- meng-capture Graphics untuk dipergunakan sebagai transisi ke scene berikutnya, menghapus @viewport, menghapus semua window instance (saat scene selesai)

OK, we're done with Scene_Base#main, so far...
Kembali ke Scene_Title...
Spoiler:
Hal yang pertama dilakukan adalah super, berarti:
- step pertama dari method ini mengacu kepada method start di Scene_Base, yaitu membuat sebuah Viewport dengan z = 200
- SceneManager.clear >> membuat @stack kosong (empty Array)
- Graphics.freeze >> membuat sebuah screen capture untuk transisi
- create_background >> membuat background (Gambar)
- create_foreground >> membuat foreground (Titel game, kalo pilihan Draw Title di cek)
- create_command_window >> membuat command window (yang isinya New Game, Continue, dan Shutdown)
- play_title_music >> dan memutar musik

Mengesampingkan create_background dan create_foreground yang lumayan mudah, mari kita membahas create_command_window
Spoiler:
hal yang pertama dilakukan oleh method ini adalah
- men-declare @command_window sebagai sebuah instance baru dari class Window_TitleCommand
- menghubungkan antara symbol2 yang ada dengan method tertentu

mari berpaling sebentar ke Window_TitleCommand
Spoiler:
Ini adalah salah satu perbedaan yang cukup menarik antara VX dan VX Ace.
RMVX menggunakan index dari command window itu sendiri, sementara Ace menggunakan Array @list di mana setiap elemennya berisi hash dengan element
Code:
{:symbol, method(method_yang_akan_dipanggil), conditional, ext }
Keterangan lebih lanjut liat Window_Command line 54

Mari kita cari cara gampangnya aja :hammer:, format untuk membuat sebuah command di window adalah:
*WARNING: bukan plug n play, cuma format aja loh ini
Spoiler:
Sedangkan eksekusinya dilakukan dari class Scene_Base dan peranakannya
Spoiler:
perlu diperhatikan bahwa ":your_symbol" yang di set di Scene dan Window harus sama.

Nah setelah kita tahu bahwa Scene_Title memiliki perintah untuk membuat sebuah Window_TitleCommand dengan 3 link antara symbol dan method di dalamnya, sekarang mari kita lihat command2 yang berhubungan dengan symbol tadi.

back to Scene_Title...
Spoiler:
saat :new_game dipilih, method command_new_game akan dijalankan.
saat :continue dipilih, method command_continue akan dijalankan.
saat :shutdown dipilih, method command_shutdown yang akan dijalankan.

Sementara cukup sekian dulu dari saya, semoga tulisan ini sedikit banyak bisa memberi inspirasi bagi RMID-er. Bagi yang belum tahu, agar bertambah ilmunya, bagi yang sudah tahu agar tetap ingat ilmunya :P

Mohon koreksi, kritik, atau sarannya :sembah:



Nambah as requested by TheoAllen
Penggunaan Alias
Alias adalah salah satu cara untuk menambahkan line pada suatu method dengan aman.
Langsung contoh ya, coba liat di Game_Actor. Mari kita coba menambahkan instance variable age. Secara default, line nya berbunyi begini

Spoiler:
Instance variable biasanya di declare pada saat initialization, namun karena struktur Game_Actor menambahkan semua instance variablenya di method setup, mari kita ikuti struktur default ace aja ya...
Coba buat line script baru di bawah material
Spoiler:
Bagaimana maksud script di atas?
Well secara gampangannya sih,
Code:
alias new_setup setup
line ini melakukan "rename sementara" terhadap method setup. Namanya diganti jadi new_setup
Code:
def setup
  new_setup
  @age = 20
end
nah di tahap ini, dia menjalankan method "new_setup" yang tadi sudah kita rename dahulu, kemudian menambahkan instance @age = 20

Jadi secara keseluruhan system akan membaca seperti ini:
Spoiler:
*Perhatikan bahwa @age = 20 ditambahkan pada line setelah new_setup selesai.

Q= Lah bedanya sama menulis method setup dari awal apaan?
A= Beda... Bedanya... ummmm
pake contoh lagi ya :hammer: Coba buat line baru di bawah penambahan age tadi. Sekarang kita coba menambah gender pada actor.
contoh 1
Spoiler:
contoh 2
Spoiler:

Contoh 1: dia aliasing method setup menjadi new_setup2. Nah, semua method setup yang sudah dilakukan sebelum line ini ditambahkan akan di-run terlebih dahulu, termasuk saat kita menambahkan @age tadi.
Contoh 2: dia langsung overwrite method setup, di sini @age yang tadi kita tambahkan tidak dijalankan karena line ini me-rewrite semua method setup.

Pada praktiknya, pasti kita banyak memakai script add-on. Dan akan terlalu lama untuk meneliti method mana saja yang sudah dialias. Untuk menghindari script-script terlewati seperti contoh 2 tadi, ada baiknya kita selalu melakukan aliasing (sebisa mungkin) untuk menambah compatibility dengan script yang lain.

Kira-kira segitu saja tambahannya, mudah2an ngerti :sembah:

Special Thanks:
GubiD
Huw Collingbourne
Anyone who created RMVX Ace Help File
Anyone who created ctrl + shift + f & ctrl + f on RMVX Ace

Part 2: Database + Notetagging


Terakhir diubah oleh Heartbreak61 tanggal 2013-02-12, 02:07, total 8 kali diubah (Reason for editing : Add: Aliasing; Fix: Text formatting)
[Ace]Understanding Workflow Empty2013-01-25, 07:53
PostRe: [Ace]Understanding Workflow
#2
TheoAllen 
♫ RMID Rebel ♫
♫ RMID Rebel ♫
TheoAllen

Kosong
Posts : 4935
Thanked : 63
Awards:




[Ace]Understanding Workflow Vide
Thanks melayang lagi. Sebagian besar pertanyaan gw terjawab =w=b
Btw, mungkin rada oot dikit dari workflow. Tapi, bisa dikasi contoh cara penggunaan alias? :hammer:

Edit: sekalian nanya
Quote :
{:symbol, method(method_yang_akan_dipanggil), conditional, ext }
ext : Arbitrary extended data << mungkin bisa diperjelas maksudnya apaan? :hammer:
[Ace]Understanding Workflow Empty2013-01-25, 22:11
PostRe: [Ace]Understanding Workflow
#3
Heartbreak61 
Novice
Novice
avatar

Level 5
Posts : 177
Thanked : 4
Engine : RMVX Ace
Skill : Very Beginner
Type : Event Designer

[Ace]Understanding Workflow Vide
@theo:
penggunaan alias? maksudnya gimana tuh? :hammer:

Masalah ext, sampe sekarang, ane juga masih ga jelas kegunaannya. Dan dari RMVX Ace default starting project sendiri ga ada sampel penggunaannya :hammer:
[Ace]Understanding Workflow Empty2013-02-09, 15:55
PostRe: [Ace]Understanding Workflow
#4
Heartbreak61 
Novice
Novice
avatar

Level 5
Posts : 177
Thanked : 4
Engine : RMVX Ace
Skill : Very Beginner
Type : Event Designer

[Ace]Understanding Workflow Vide
Part II: DataManager & Notetagging
Di awal sudah kita bahas mengenai SceneManager.run. Nah salah satu isi dari SceneManager.run itu adalah DataManager.init. Mari sekarang kita coba bahas DataManager :3

Spoiler:
Quote :
- Melakukan deklarasi nilai awal @last_savefile_index yang nantinya akan disesuaikan sesuai dengan posisi index save slot terakhir.
- Mengeset beberapa global variable menjadi value dari load_file .rvdata2 yang di save dari editor
- Membuat instance beberapa dari Game_ class
- Melakukan persiapan battle_test apabila game dipanggil dari tab Troop >> Battle Test

Dari keempat line di atas, yang cukup menarik adalah load_database karena sering digunakan untuk melakukan notetagging.

Sedangkan create_game_objects bisa dimanfaatkan juga apabila kita ingin membuat suatu instance dari class yang kita buat sendiri. (Misal kita membuat class Game_Time). Walaupun sebenarnya instance bisa di diclare di mana saja, tetapi kalo di declare di sini kan ada temen-temennya (ga penting banget :ming:).

About Database
Ketika pertama mengenal RPG Maker, saya sempat bingung apakah perbedaan antara RPG::Actor dengan Game_Actor, kapan masing-masing class tersebut di-initialize, dan apakah hubungan antara dua class yang identik tersebut. Nah, sekarang saya mencoba berbagi hal-hal yang telah saya pelajari selama ini agar teman-teman tidak perlu mengalami kebingungan seperti saya.

Database yang kita edit di Editor RM akan disimpan dalam bentuk file *.rvdata2 (VX Ace). Sedangkan strukturnya dapat dilihat di Help File >> RGSS Reference Manual >> Game Library >> RPGVXAce Data Structures.

Setiap class RPG::* memiliki instance variables yang sama persis dengan value yang bisa diedit di Editor. Mari kita coba ambil contoh dari map yang kita edit menggunakan Editor. Pada dasarnya, semua data yang kita buat akan ditampung dalam 3 class untuk memudahkan pengorganisasian yaitu RPG::Map, RPG::Map::Encounter, dan RPG::MapInfo.
Spoiler:
Sekarang mari kita coba bandingkan struktur di atas dengan gambar ini.
Spoiler:
Terlihat bahwa semua data Map yang bisa diedit di Editor ditampung dalam instance variable dari class RPG::Map, RPG::Map::Encounter, dan RPG::MapInfo. Hal tersebut berlaku juga untuk Actor, Class, Weapon, Item, System, dsb.

Kemudian semua instance yang ada tersebut disimpan dalam sebuah file yang berekstensi *.rvdata2. Jadi misalnya kita membuat 10 actor, maka dalam file Actors.rvdata2 akan terdapat 10 instance dari class RPG::Actor.

Mari kita kembali melihat ke DataManager#load_normal_database.
Spoiler:
Dapat kita lihat bahwa global $data_* hanya merupakan wrapper dari semua class RPG::* yang sudah disimpan dalam file *.rvdata2. Hal ini dilakukan untuk memudahkan reference saat Ace melakukan inisialisasi class Game.

Berikut adalah contoh proses reference dari $data_actors ke class Game_Actor
Spoiler:
Di sini, method actor merujuk pada $data_actors[@actor_id]. Sehingga dapat dikatakan bahwa actor itu adalah data yang terdapat pada Actors.rvdata2 dengan indeks @actor_id.

Kesimpulannya, secara garis besar proses dari kita mengedit data di Editor sampai dipergunakan di dalam game secara garis besar adalah sebagai berikut.
Spoiler:
*penting ya? :hammer:



Bonus: Notetagging
Notetagging biasanya diartikan dengan melakukan match data dari Note di database kemudian (biasanya) melakukan deklarasi instance variable dari class RPG dan peranakannya. Contoh dari notetagging yang sederhana adalah menambahkan instance variable age dan gender pada class Game_Actor.
Berikut ini adalah salah satu cara untuk melakukan notetagging
Spoiler:
*Saya biasanya memberikan comment untuk setiap class end untuk menghindari syntax error akibat kekurangan/kelebihan end.

Setelah memerintahkan Ace untuk melakukan method scan note untuk class RPG::* yang diinginkan, kita perlu melakukan deklarasi di class RPG::* tersebut agar tidak muncul no-method error.

Spoiler:

Setelah selesai melakukan editing di RPG::Actor, mari kita mengedit class yang akan benar-benar dipakai di game. Ingat bahwa RPG::Actor itu hanya merupakan database yang nantinya akan menjadi referensi pada saat inisialisasi Game_Actor.
Spoiler:

nah dengan model seperti di atas, apabila kita menambahkan <age: value> dan <gender: value> di actor's note, data tersebut akan di load melalui DataManager dan digunakan di Game_Actor class.

apabila di tengah-tengah game kita memutuskan untuk menggunakan gender atau age sebagai referensi, maka kita tinggal memanggil method tersebut, misalnya

Code:
$game_actors[1].age < 20 ? p "Young" : p "Old"

segitu dulu, penjelasan mendetailnya masih dipikir kata-katanya :hammer:

PS: post under construction
[Ace]Understanding Workflow Empty
PostRe: [Ace]Understanding Workflow
#5
Sponsored content 




[Ace]Understanding Workflow Vide
 

[Ace]Understanding Workflow

Topik sebelumnya Topik selanjutnya Kembali Ke Atas 
Halaman 1 dari 1

Permissions in this forum:Anda tidak dapat menjawab topik
RPGMakerID :: Creative Commons :: Tutorials-