มาหัดใช้ Game State Management II

posted on 05 Jan 2008 16:41 by xnanoob  in Tutorials

สวัสดีค่า

วันนี้มาหัดใช้ Game State Management กันต่อ

สำหรับบางคนนั้นถามว่าทำไมไม่ทำเอง? ทำไมต้องเอาตัวอย่างของ microsoft อย่างตัวอย่างนี้มาแกะด้วย?

ก้อนะ...ทำเองก้อได้แระนะ แต่โค้ดคุณจะรู้สึกแย่อะ การดักและเช็คเงื่อนไขจะเต็มไปหมด

ถ้างานคุณมีขนาดใหญ่ขึ้นชีวิตคงไม่มีความสุข (มั่ง)

หลังจากที่ Download มาแล้ว ให้เราจัดการกับ Folders ในสอง Folders คือ Screen Manager และ Screens

  • Screen Manager จะมี 3 Files นะ 
    - GameScreen.cs
    - InputState.cs
    - ScreenManager.cs
  • Screens จะมีหลายไฟล์หน่อย 
    - BackgroundScreen.cs
    - LoadingScreen.cs
    - MenuScreen.cs
    - MessageBoxScreen.cs
    - PauseMenuScreen.cs
    - และสุดท้าย MainMenuScreen.cs

ทำไมต้องเน้นตรง MainMenuScreen ก้อเพราะเราจะจัดการในส่วนนี้กัน ซึ่งจะมี Menu Entry เอาไว้ add เข้าสู่
List ไว้เพื่อจัดการอีกครั้งหนึ่ง

 

public MainMenuScreen():

base("Main Menu")

{

// Create our menu entries.

MenuEntry playGameMenuEntry = new MenuEntry("PlayGame");

MenuEntry optionsMenuEntry = new MenuEntry("Options");

MenuEntry exitMenuEntry = new MenuEntry("Exit");

 

// Hook up menu event handlers.

playGameMenuEntry.Selected += PlayGameMenuEntrySelected;

optionsMenuEntry.Selected += OptionsMenuEntrySelected;

exitMenuEntry.Selected += OnCancel;

// Add entries to the menu.

MenuEntries.Add(playGameMenuEntry);

MenuEntries.Add(optionsMenuEntry);

MenuEntries.Add(exitMenuEntry);

}



ในส่วนนี้เป็นคอนสตั๊กเตอร์ของ maimenuscreen ก้อเป็นตัวที่บอกว่าจะมีไรบ้างในเมนู

 

// Create the screen manager component.

screenManager = new ScreenManager(this);

Components.Add(screenManager);

// Activate the first screens.

screenManager.AddScreen(new BackgroundScreen());

screenManager.AddScreen(new MainMenuScreen());


จากนั้นทำการ add component ใน game.cs ของคุณนะ

ก่อนอื่นก้อไป new instance ของ ScreenManager ซึ่งจะเป็นตัวคอยจัดการ Screen ต่างๆและควบคุมสถานะ

การเปลี่ยน การย้ายฉาก โดยที่ Screenmanager นั้น inherit มาจาก Drawable GameComponent เพราะฉะนั้น

เค้าก้อเลยบอกว่ามันจะสามารถ "Add GameCollectionComponents ของเกมได้"

ซึ่งทุกๆ Component ใน Collection จะสามารถ Update หรือ Draw ได้ โดยใช้ ScreenManager

ตัวอย่างนี้ในไฟล์ Main นั้นมีการผูก event ในเมนูเมื่อมีการเลือก
ถ้าใครลองทำเองให้ลองปิด Comment นี้ไว้ก่อน

จากภาพจะสังเกตว่า หน้าแต่หละหน้า คือ คลาสหนึ่ง ปกติหนึ่งไฟล์จะแยกเป็นหนึ่งคลาสอยู่แล้ว

ผลลัพธ์จากการ run นี้จะได้หน้าเมนูหน้าแรกมาเฉยๆ โดยที่กดไรไม่ได้เลย ได้แค่เลื่อนๆ ทำนั้นเอง
เนื่องจากไม่มี event ผูกเข้าไป

จบแระค่ะ บายค่ะ

edit @ 5 Jan 2008 23:28:11 by xnanoob

Comment



smilebig smileopen-mounthed smileconfused smilesad smileangry smiletonguequestionembarrassedsurprised smilewinkdouble winkcry