XNA-2D 打磚塊遊戲(四)- 場景切換

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」→「主選單」

程式範例:XNA-2D 打磚塊遊戲(四)- 場景切換.rar