MGDW4 Online Camp #3b - State Management
-
Upload
agate-studio -
Category
Education
-
view
773 -
download
0
description
Transcript of MGDW4 Online Camp #3b - State Management
Mobile Game Developer War 4: Online Camp
MGDW4 Online Camp 3.2
State Management
Mobile Game Developer War 4: Online Camp
Apa itu state?• Dalam game kita perlu menyimpan berbagai
informasi:– Level dan status pemain– Stage yang sudah dibuka– Highscore, achievements– Berbagai quest atau misi yang dijalankan pemain
Informasi-informasi tersebut disebut juga dengan game state.
Mobile Game Developer War 4: Online Camp
State Management
Suatu mekanisme untuk menyimpan dan mengolah informasi state dalam sebuah
game.
Mobile Game Developer War 4: Online Camp
Contoh penggunaan• Screen transition
– Menentukan layar apa yang kita tampilkan pada suatu saat
– Misalnya: Main menu, option menu, in game, pause menu, dll
Mobile Game Developer War 4: Online Camp
Contoh penggunaan• RPG Game State
– Menentukan pemain sedang menjalani event/quest/misi apa
– State tersebut akan mempengaruhi respon dari game
– Contohnya: NPC X akan bergabung dengan party jika pemain sudah mengalahkan monster Y Di game Suikoden II, di akhir permainan
akan ada event khusus jika kita berhasil mengumpulkan 108 karakter.
Mobile Game Developer War 4: Online Camp
Konsep di balik State Management
• State management disimpan dalam bentuk graph atau flowchart– Sebuah state digambarkan dengan suatu
node– Setiap state akan memiliki satu atau lebih
transisi (baik dari atau menuju state tsb)– Setiap transisi akan dipengaruhi oleh suatu
trigger atau nilai tertentu
Mobile Game Developer War 4: Online Camp
Contoh Kasus: Screen Flow
Mobile Game Developer War 4: Online Camp
Implementasi State Manager• Kita perlu menyimpan state dalam suatu variabel,
misalnya integer untuk kode screen saat ini• Untuk mengecek state kita dapat menggunakan if
atau switch-case• Pengecekan perlu dilakukan di setiap bagian yang
terpengaruh• Misalnya untuk screen, akan mempengaruhi:
– Input– Draw– Update
Untuk bagian koding materi ini bisa melanjutkan dari project yang sebelumnya, hanya draw dan
getInput yang banyak berubah :D
Mobile Game Developer War 4: Online Camp
//deklarasi variabel pentingint screenState;final int SCREEN_MAIN_MENU = 0;final int SCREEN_OPTION = 1;final int SCREEN_LEVEL_SELECTION= 2;final int SCREEN_TUTORIAL = 3;final int SCREEN_IN_GAME = 4;final int SCREEN_PAUSE = 5;final int SCREEN_RESULT = 6;final int SCREEN_EXIT = 7;
//fungsi drawprivate void draw(){ switch (screenState) { case SCREEN_MAIN_MENU: //... break; case SCREEN_OPTION: //... break; case SCREEN_LEVEL_SELECTION: //... break; case SCREEN_IN_GAME: //... break; case SCREEN_TUTORIAL: //... break; case SCREEN_PAUSE: //... break; case SCREEN_RESULT: //... break; case SCREEN_EXIT: //... break; default: break; }}
Implementasi state management dengan switch-case ->
Kode untuk setiap state bisa kita simpan dalam variabel dengan nama yang jelas
private void init(){ gameover = false; screenState = SCREEN_MAIN_MENU;}
State awal perlu kita tentukan
Mobile Game Developer War 4: Online Camp
//...(lihat di slide sebelumnya)case SCREEN_MAIN_MENU: g.setColor(0x000000); g.drawString("Main Menu Screen", 10, 0, Graphics.TOP | Graphics.LEFT); g.drawString("^ Go to Option", 10, 50, Graphics.TOP | Graphics.LEFT); g.drawString("> Play Game", 10, 100, Graphics.TOP | Graphics.LEFT); g.drawString("< Exit", 10, 150, Graphics.TOP | Graphics.LEFT); break;case SCREEN_OPTION: g.setColor(0xff0000); g.drawString("Option Screen", 10, 0, Graphics.TOP | Graphics.LEFT); g.drawString("^ Back to main menu", 10, 50, Graphics.TOP | Graphics.LEFT); g.drawString(“> Play game", 10, 100, Graphics.TOP | Graphics.LEFT); break;case SCREEN_LEVEL_SELECTION: g.setColor(0x00ff00); g.drawString("Level Selection Screen", 10, 0, Graphics.TOP | Graphics.LEFT); g.drawString("^ Back to main menu", 10, 50, Graphics.TOP | Graphics.LEFT); break;case SCREEN_IN_GAME: g.setColor(0x0000ff); g.drawString("Game Screen", 10, 0, Graphics.TOP | Graphics.LEFT); break;//...(lihat di slide sebelumnya)
Isi fungsi draw
Mobile Game Developer War 4: Online Camp
//...(lihat di slide sebelumnya)case SCREEN_MAIN_MENU: g.setColor(0x000000); g.drawString("Main Menu Screen", 10, 0, Graphics.TOP | Graphics.LEFT); g.drawString("^ Go to Option", 10, 50, Graphics.TOP | Graphics.LEFT); g.drawString("> Play Game", 10, 100, Graphics.TOP | Graphics.LEFT); g.drawString("< Exit", 10, 150, Graphics.TOP | Graphics.LEFT); break;case SCREEN_OPTION: g.setColor(0xff0000); g.drawString("Option Screen", 10, 0, Graphics.TOP | Graphics.LEFT); g.drawString("^ Back to main menu", 10, 50, Graphics.TOP | Graphics.LEFT); g.drawString(“> Play game", 10, 100, Graphics.TOP | Graphics.LEFT); break;case SCREEN_LEVEL_SELECTION: g.setColor(0x00ff00); g.drawString("Level Selection Screen", 10, 0, Graphics.TOP | Graphics.LEFT); g.drawString("^ Back to main menu", 10, 50, Graphics.TOP | Graphics.LEFT); break;case SCREEN_IN_GAME: g.setColor(0x0000ff); g.drawString("Game Screen", 10, 0, Graphics.TOP | Graphics.LEFT); break;//...(lihat di slide sebelumnya)
Isi fungsi draw
Mobile Game Developer War 4: Online Camp
Implementasi transisi screenprivate void getInput(){ int keystate = getKeyStates(); switch (screenState) { case SCREEN_MAIN_MENU: if (keystate == LEFT_PRESSED){ if(!lefthold){ screenState = SCREEN_EXIT; lefthold=true; } }else lefthold=false; if(keystate == UP_PRESSED){ if(!uphold){ screenState = SCREEN_OPTION; uphold=true; } }else uphold=false; if (keystate == RIGHT_PRESSED){ if(!righthold){ screenState = SCREEN_LEVEL_SELECTION; righthold=true; } }else righthold=false; break;
case SCREEN_OPTION: if(keystate == UP_PRESSED){ if(!uphold){ screenState = SCREEN_MAIN_MENU; uphold=true; } }else uphold=false; break; case SCREEN_LEVEL_SELECTION: if(keystate == UP_PRESSED){ if(!uphold){ screenState = SCREEN_MAIN_MENU; uphold=true; } }else uphold=false; break;
//...silahkan lengkapi untuk setiap screen default: break; }}
2
1Bagian yang berwarna merah adalah implementasi transisi antar state
Mobile Game Developer War 4: Online Camp
Hasil sejauh ini:
Coba kalian lengkapi sampai semua flow menu pada flowchart diimplementasi
Quest:
Mobile Game Developer War 4: Online Camp
Cara menyelesaikan Quest1. Kirim source code MainCanvas.java ke
email: [email protected]. Gunakan subject “Quest Online Camp
03b – State Management”
Mobile Game Developer War 4: Online Camp
• Untuk menyelesaikan materi, kunjungi http://bit.ly/KsDbj1
• Untuk pertanyaan atau diskusi, bisa dilakukan via forum: http://bit.ly/mgdw4forum