mgdw4 online camp #3b - state management

15
Mobile Game Developer War 4: Online Camp MGDW4 Online Camp 3.2 State Management

Upload: agate-studio

Post on 18-Nov-2014

775 views

Category:

Education


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: MGDW4 Online Camp #3b - State Management

Mobile Game Developer War 4: Online Camp

MGDW4 Online Camp 3.2

State Management

Page 2: MGDW4 Online Camp #3b - 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.

Page 3: MGDW4 Online Camp #3b - State Management

Mobile Game Developer War 4: Online Camp

State Management

Suatu mekanisme untuk menyimpan dan mengolah informasi state dalam sebuah

game.

Page 4: MGDW4 Online Camp #3b - State Management

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

Page 5: MGDW4 Online Camp #3b - State Management

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.

Page 6: MGDW4 Online Camp #3b - State Management

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

Page 7: MGDW4 Online Camp #3b - State Management

Mobile Game Developer War 4: Online Camp

Contoh Kasus: Screen Flow

Page 8: MGDW4 Online Camp #3b - State Management

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

Page 9: MGDW4 Online Camp #3b - State Management

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

Page 10: MGDW4 Online Camp #3b - State Management

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

Page 11: MGDW4 Online Camp #3b - State Management

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

Page 12: MGDW4 Online Camp #3b - State Management

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

Page 13: MGDW4 Online Camp #3b - State Management

Mobile Game Developer War 4: Online Camp

Hasil sejauh ini:

Coba kalian lengkapi sampai semua flow menu pada flowchart diimplementasi

Quest:

Page 14: MGDW4 Online Camp #3b - State Management

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”

Page 15: MGDW4 Online Camp #3b - 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