電腦遊戲製作開發設計論壇 首頁 電腦遊戲製作開發設計論壇
任何可以在PC上跑的遊戲都可以討論,主要以遊戲之製作開發為主軸,希望讓台灣的遊戲人有個討論、交流、教學、經驗傳承的園地
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

Google
有關遊戲階段的問題

 
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式中級班:資料結構、Win32 API、各種視窗函式庫
上一篇主題 :: 下一篇主題  
發表人 內容
fire231
散播福音的祭司


註冊時間: 2007-09-15
文章: 152

322.55 果凍幣

發表發表於: 2007-10-16, PM 3:46 星期二    文章主題: 有關遊戲階段的問題 引言回覆

問了yag後還是不太懂到底要怎麼使用

假設這個遊戲有不同的階段

開始選單 遊戲進行 結束選單

這3個階段的訊息回圈要使用不同的

那要怎麼設定?

yag說要用類別~但我還是不太知道要放在哪邊
回頂端
檢視會員個人資料 發送私人訊息
babu61509
散播福音的祭司


註冊時間: 2007-08-26
文章: 142

681.01 果凍幣

發表發表於: 2007-10-16, PM 6:56 星期二    文章主題: 引言回覆

轉成C++的語法好麻煩...
我用C# 寫 XNA 的方法跟你說一下...

在XNA專案裡面,只要程式不被結束掉,程式初始化完以後會自動呼叫 Update 函數 和 Draw 函數.

假設遊戲有5個狀態 : (假設每個狀態要執行的程式碼都寫好了)

就用 enum 去建立一個存遊戲狀態的格式,裡面有
代碼:

    enum GameStatus
    {
        Init,       // 初始化
        MainMenu,   // 主選單
        GamePlay,   // 開始遊戲
        GameMenu,    // 遊戲選單
        GameOver    // 遊戲結束
    }

宣告一個 GameStatus 類型的 mGameStatus 變數拿來放遊戲狀態
然後在Update裡面 加一個switch去判斷現在狀態,並根據狀態執行class...
代碼:

switch (mGameStatus)
                    {
                        case GameStatus.Init:     // 初始化
                            mGameInit.Update(GameTime);   // 執行mGameInit 的 Update 方法
                            break;

                        case GameStatus.MainMenu:  // 主選單
                            mMainMenu.Update(GameTime);  // 執行mMainMenu 的 Update 方法
                            break;

                        case GameStatus.GamePlay:  // 遊戲開始
                            mGamePlay.Update(gameTime);  // 執行mGamePlay 的 Update 方法
                            break;

                        case GameStatus.GameMenu:
                            mGameMenu.Update(gameTime);  // 執行mGameMenu 的 Update 方法
                            break;
                        case GameStatus.GameOver:
                            mGameOver.Update(gameTime);  // 執行mGameOver 的 Update 方法
                            break;
                    }


完整一點的程式碼就是 (不能跑 但是變數該宣告的都宣告) :
當然 GameInit、MainMenu、GamePlay、GameMenu、 GameOver 的類別要寫好...

代碼:

    enum GameStatus
    {
        Init,       // 初始化
        MainMenu,   // 主選單
        GamePlay,   // 開始遊戲
        GameMenu,    // 遊戲選單
        GameOver    // 遊戲結束
    }

        public GameStatus mGameStatus; // 宣告 GameStatus 型 mGameStatus
        private GameInit mGameInit;   // 宣告 GameInit 型 mGameInit
        private MainMenu mMainMenu;  // 宣告 MainMenu 型 mMainMenu
        private GamePlay mGamePlay; // 宣告 GamePlay 型 mGamePlay
        private GameMenu mGameMenu; // 宣告 GameMenu 型 mGameMenu
        private GameOver mGameOver;  // 宣告 GameOver 型 mGameOver

        protected override void Initialize()   // 初始化 (程式開始執行會跑,但只會跑一次)
        {
            mGameStatus = GameStatus.Init;  // 設定 mGameStatus 為初始化

            mGameInit = new GameInit(this, graphics, content);  // 建立mGameInit並初始化
            mMainMenu = new MainMenu(this, graphics, content);  // 建立mMainMenu並初始化
            mGamePlay = new GamePlay(this, graphics, content);  // 建立mGamePlay並初始化
            mGameMenu = new GameMenu(this, graphics, content);  // 建立mGameMenu並初始化
            mGameOver= new GameOver(this, graphics, content);  // 建立mGameOver並初始化

            base.Initialize();
        }

        protected override void Update(GameTime gameTime)
        {
        switch (mGameStatus)
                    {
                        case GameStatus.Init:     // 初始化
                            mGameInit.Update(GameTime);   // 執行mGameInit 的 Update 方法
                            break;

                        case GameStatus.MainMenu:  // 主選單
                            mMainMenu.Update(GameTime);  // 執行mMainMenu 的 Update 方法
                            break;

                        case GameStatus.GamePlay:  // 遊戲開始
                            mGamePlay.Update(gameTime);  // 執行mGamePlay 的 Update 方法
                            break;

                        case GameStatus.GameMenu:
                            mGameMenu.Update(gameTime);  // 執行mGameMenu 的 Update 方法
                            break;
                        case GameStatus.GameOver:
                            mGameOver.Update(gameTime);  // 執行mGameOver 的 Update 方法
                            break;
                    }       
        }

_________________
已經畢業了!!
回頂端
檢視會員個人資料 發送私人訊息
fire231
散播福音的祭司


註冊時間: 2007-09-15
文章: 152

322.55 果凍幣

發表發表於: 2007-10-16, PM 9:47 星期二    文章主題: 引言回覆

可以用C++講解嗎= =

我看不懂XNA...
回頂端
檢視會員個人資料 發送私人訊息
vamper
對這略感興趣的新人


註冊時間: 2007-06-23
文章: 29
來自: 台灣
18.82 果凍幣

發表發表於: 2007-10-16, PM 9:56 星期二    文章主題: 不能吃主題呀! 引言回覆

用State Pattern就能解決了!

就是二樓PO的文章。

我找找以前的資料,這個滿不錯的。

這是台科大的某位老師建立的SDK,自己看看吧~

其中有個「Game framework introduction 」的連結點,

裡面有介紹到State Pattern。

http://www.cc.ntut.edu.tw/~wkchen/game/index.htm


/////////// 底下是歲歲念 ///////////

沒想到這麼快就想學遊戲的流程架構,

嘛....自己能站穩腳步就行了。
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
lsk
喜歡上這裡的冒險者


註冊時間: 2007-06-20
文章: 93

20.59 果凍幣

發表發表於: 2007-10-17, AM 1:26 星期三    文章主題: 引言回覆

fire231 寫到:
可以用C++講解嗎= =

我看不懂XNA...


其實上面大大波的跟c++的code沒有什麼差別喔!! state pattern在遊戲的主程式上很重要,簡單來說,就是讓你在大迴圈裡可以跑不同的小迴圈,一旦這個... 一號小迴圈(可能是你的第一層選單)跑完了,就可以切換state,換跑二號小迴圈(可能是你的第二層選單)。

Fire你很幸福,一有問題就那麼多人回答你,即始你會覺得很硬,也是比一般的人自己去翻書、查網頁要快得多多了 : ) 加油~
回頂端
檢視會員個人資料 發送私人訊息
fire231
散播福音的祭司


註冊時間: 2007-09-15
文章: 152

322.55 果凍幣

發表發表於: 2007-10-17, PM 5:57 星期三    文章主題: 引言回覆

也要感謝大家阿

幫助我解決問題

再研究1下

目前有個人也在跟我討論

我們兩個目前都在摸索視窗的寫法以及用法= =

因為2樓大大用的方法我沒看過(函數)

又不是WIN32API的方法~所以看不太懂= =

不過目前似乎有種靈感= =..
回頂端
檢視會員個人資料 發送私人訊息
vamper
對這略感興趣的新人


註冊時間: 2007-06-23
文章: 29
來自: 台灣
18.82 果凍幣

發表發表於: 2007-10-17, PM 6:32 星期三    文章主題: 引言回覆

fire231 寫到:
也要感謝大家阿

因為2樓大大用的方法我沒看過(函數)

又不是WIN32API的方法~所以看不太懂= =

不過目前似乎有種靈感= =..


嘛...這也不能怪你,因為只有接觸過的人(物件導向模組)才知道的,

一看就知道那是什麼。

其實...到了一定的功力之後,只要知道演算法,一點就通了。

雖然我不會C# or XNA,我也大約看出來,因為語法和架構都差不多。

至於要搭配到視窗的Game Loop的話,一定要對視窗整個流程有一定的概念,

才能去增加一些程序,所以我才擔心你的腳會站不穩。

不過多一個人討論比一個人討論出來還快,還滿不錯的。

///////////////// 題外話 /////////////////////

今天遇到一件滿高興的事情,話比較多點。
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
babu61509
散播福音的祭司


註冊時間: 2007-08-26
文章: 142

681.01 果凍幣

發表發表於: 2007-10-17, PM 6:53 星期三    文章主題: 引言回覆

如果你是問 protected 和 override 沒看過的話...
建議你去找有談到 繼承類別 的書來看看 - _-
那個是 物件導向 的東東...

------------------------------------------------

阿,還有上面那個程式碼是用C#寫的...

XNA 是函式庫, DirectX 簡化後的函式庫...

------------------------------------------------

http://nknucc.nknu.edu.tw/~jwu/c/cpg.htm

奇摩找到的 C/C++ 教學網頁 XD

_________________
已經畢業了!!
回頂端
檢視會員個人資料 發送私人訊息
fire231
散播福音的祭司


註冊時間: 2007-09-15
文章: 152

322.55 果凍幣

發表發表於: 2007-10-17, PM 7:34 星期三    文章主題: 引言回覆

QQ

稍微成功了(目前只有1個階段~使用類別成功)

我是設定1個類別(假設A)

裡面有第1個階段要用的變數以及LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);函數
(開始的選單)

然後用

LRESULT CALLBACK A::LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
..敘述
}

來寫入這階段的訊息回圈

之後再使用A gamestage;來創個A類別的階段

然後訊息回圈目前只有指定
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
gamestage.WndProc(hwnd,msg,wParam,lParam)
}

這樣可以執行~

不知這樣使用對不對
回頂端
檢視會員個人資料 發送私人訊息
fire231
散播福音的祭司


註冊時間: 2007-09-15
文章: 152

322.55 果凍幣

發表發表於: 2007-10-17, PM 7:58 星期三    文章主題: 引言回覆

話說

我成功了= =

但是..

在編輯的時候用測試~跟直接按生產出來的EXE檔

兩種產生的效果不同耶= =

我有個選單 然後到下階段會清空產生1個暫時用來判斷的圖片

但是我直接按執行檔會自動播放到第2階段= =
回頂端
檢視會員個人資料 發送私人訊息
zwshen
對這略感興趣的新人


註冊時間: 2008-03-11
文章: 22
來自: Taiwan
0.00 果凍幣

發表發表於: 2008-4-19, PM 5:26 星期六    文章主題: Re: 不能吃主題呀! 引言回覆

vamper 寫到:

這是台科大的某位老師建立的SDK,自己看看吧~

其中有個「Game framework introduction 」的連結點,

裡面有介紹到State Pattern。

http://www.cc.ntut.edu.tw/~wkchen/game/index.htm


抱歉指正一下,這位是北科大資工系的老師,他有
開一門大三的程式實習課,利用做遊戲來訓練程式
技術及物件導向的觀念,上課學生通常是兩人一組
,在一學期時間內完成一個遊戲作品,成品都很不
錯。在這老師的網頁上,有放一個叫 NTUT Striker
的射擊遊戲,就是幾年前學生的優秀作品。

有興趣的人,可以下載來安裝玩玩看:http://www.cc.ntut.edu.tw/~wkchen/game/NTUT_Striker_v1.0_Setup.msi

台北科技大學 是 北科大;台灣科技大學 才是 台科大。
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
fire231
散播福音的祭司


註冊時間: 2007-09-15
文章: 152

322.55 果凍幣

發表發表於: 2010-11-1, AM 12:44 星期一    文章主題: 引言回覆

看到以前發的文章

有點感慨阿!!!!


現在我也是北科大的學生

可是卻不是資工系
回頂端
檢視會員個人資料 發送私人訊息
yag
Site Admin


註冊時間: 2007-05-02
文章: 688

2673.35 果凍幣

發表發表於: 2010-11-1, AM 9:30 星期一    文章主題: 引言回覆

fire231 寫到:
看到以前發的文章

有點感慨阿!!!!


現在我也是北科大的學生

可是卻不是資工系

沒關係,你是X工系,只差一個字
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
fire231
散播福音的祭司


註冊時間: 2007-09-15
文章: 152

322.55 果凍幣

發表發表於: 2010-11-1, PM 4:47 星期一    文章主題: 引言回覆

yag 寫到:
fire231 寫到:
看到以前發的文章

有點感慨阿!!!!


現在我也是北科大的學生

可是卻不是資工系

沒關係,你是X工系,只差一個字


天才跟蠢才也是一字之差阿~哀...
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式中級班:資料結構、Win32 API、各種視窗函式庫 所有的時間均為 台灣時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
可以 在這個版面附加檔案
可以 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作