XNA-2D 打磚塊遊戲(四)- 場景切換
接著我們想要讓打磚塊的遊戲更加的完整,所以需要增加遊戲選單以及結束畫面。
這裡指的遊戲場景(scene)可以看做關卡,或是玩遊戲的每個階段,依個人的設計而定,
首先要決定要有那些場景,這個小遊戲就設計有三個吧,分別是開始的選單、主要遊戲、結束畫面。
因此會有scenemanager來管理場景,他繼承DrawableGameComponent,主程式會將scenemanager加入Components,並負責管理場景的切換。
另外我還設計了屏幕(screen)的概念,一個場景可能由很多屏幕組成,每個屏幕會有自己應該做的事。
像是主要遊戲的部份就有一個分數的屏幕,專門用來顯示分數。
因此我們的場景會有一個基礎物件,裡面有屏幕的list以及繪圖的SpriteBatch,如下:
public abstract class GameScene : DrawableGameComponent {
public string Name;
public SpriteBatch Sprite;
public List<ScreenBase> Screens;
public GameScene(Game game, string name)
: base(game) {
Name = name;
Screens = new List<ScreenBase>();
}
public override void Update(GameTime gameTime) {
foreach (ScreenBase sb in Screens) {
sb.Update(gameTime);
}
base.Update(gameTime);
}
public override void Draw(GameTime gameTime) {
foreach (ScreenBase sb in Screens) {
sb.Draw(gameTime, Sprite);
}
base.Draw(gameTime);
}
}
開始選單就直接拿上一個範例XNA - 簡易選單,讓他繼承GameScene,並且小改一下,接著再將他加入scenemanager。
我們就可以藉由加入場景與移除場景做場景的切換,
而另一個ScreenBase是屏幕的基礎物件,只是為了一個場景可以組合多的畫面而設計,所以只有簡單的Update和Draw。
另外產生SpriteBatch是一個很耗效能的行為,所以在將場景加入scenemanager時,會將SpriteBatch傳給場景。
而遊戲的流程就設定為「主選單」→「主遊戲」→「game over」→「主選單」