遊戲中實現腳本控制的乾貨分享
一個遊戲引擎做好了,最重要的是缺什麼?腳本。打個比方,遊戲引擎是一部電腦,則腳本就是電腦的軟件。既然腳本這麼重要,那該怎樣實現呢?下面yjbys小編就來説説自己的做法。想了解更多相關資訊請持續關注我們應屆畢業生培訓網。
首先理解一下消息循環
一個好的遊戲離不開好的消息循環。它是遊戲實現很重要的一部分。
首先,我定義了一個全局變量extern int GameState;
在遊戲中定義了許多當前的遊戲狀態例如
#define GAME_STATE_CUSTOM 0 //這代表在戰鬥中玩家可以控制遊戲
#define GAME_STATE_TALKING 1
等等。
好了,下面在WinMain裏面的while(1)循環中有個UpdateScreen()函數
原型為
void UpdateScreen()
{
延時
switch(GameState)
{
case GAME_STATE_CUSTOM:
畫出地圖
畫出所有精靈
畫出天氣(如果有的話)
如果玩家選中了敵人的話(打個比方DrawFlag=DrawEnemyState)就顯示敵人的移動範圍和敵人狀態
break;
case GAME_STATE_TALKING:
GameDialogProc();
break;
case GAME_STATE_SCRIPTCONTROLLING:
ScriptControlProc();
break;
….//其他的消息在這裏處理
}
將緩衝表面的圖象顯示到屏幕;
}
每個遊戲狀態都需要一個獨立的.函數來寫。這樣在每次切換遊戲狀態時都不會出現無法處理的情況。在處理鍵盤消息的時候我也用一個個獨立的函數來寫,如處理回車鍵我用了 KeyReturnProc()來控制。在這個函數裏同樣也少不了switch(GameState)這一句,為什麼?答案很簡單,比如説在精靈行走時回車鍵就沒有用,這是我沒有處理精靈行走這個狀態的鍵盤消息。而在戰鬥場景裏按下回車鍵,如果有精靈在選擇框裏的話,就會處理相應的東西。
例如選擇了敵人則使DrawFlag=DrawEnemyState;這樣在更新屏幕時就會畫出敵人的移動範圍和狀態。
明白了嗎?好了,如果你明白了消息循環的原理,下面的東西就很容易理解了。
下面談談腳本控制
要實現這個,就必須在UpdataScreen()這個函數中攔截一個“腳本控制”的消息,並調用相應的處理函數:ScriptControlProc(); 那麼怎樣得到“腳本控制”這個消息呢?我是這樣約定的:
新遊戲->調用腳本
“戰鬥結束”->調用腳本
“前往下一個地點”->調用腳本
好了,就只有這幾種情況下才調用,調用腳本的函數為BeginScriptControl();
這個函數做了三個工作:
1.首先讀取舞台(場景)角色的數據(沒一關都是一個不同的舞台)
2.打開腳本文件(注意要用全局的文件指針)(雖然我在源程序中沒直接打開,但是原理是一樣的)
3.將遊戲狀態設定為“腳本控制”以便在下一次UpdateScreen()中調用的是ScriptControlProc();(怎麼樣?知道消息循環的作用了吧?)
ScriptControlProc()這個函數其實也很簡單:
讀取腳本文件中的參數直到文件結束,讀取腳本文件需要一個解釋腳本的函數LoadParam(FILE*fp);這個函數負責解釋腳本中的東西:是函數調用還是函數參數,然後找到相應的函數執行即可。
比如説腳本里有一段代碼MovePlayerTo(1,1,1);意思就是把第1個玩家移動到1,1處。怎樣做呢?
我是按照以下幾步做的
1.保存當前的遊戲狀態
2.把當前遊戲狀態設定為“移動精靈”
當引擎得到“移動精靈”這個函數後,在UpdataScreen()中調用的是MoveRoleProc()這個函數。
當移動結束後,MoveRoleProc()調用EndMoveRole(),這個函數的作用就是讀取先前的遊戲狀態
怎麼樣?又回到讀腳本了吧?記住在移動角色的時候腳本文件的指針沒有改變,所以回到讀腳本的這個函數後不是重新讀取而是繼續讀取!同理其他的腳本指令如LoadDialog也是一樣的道理!
當文件要結束的時候,別忘了告訴引擎該停止了,這時候我們必須更新遊戲狀態。腳本里的SetGameState就是負責這項工作的。
-
淺談手遊設計中的迭代與規劃
手遊設計理念典型遵循了設計哲學的兩個基本學派:1.基於迭代的設計=只是用一些核心的機制,然後繼續迭代,直到開發出一些有趣的東西,這是一種在開發之前所使用的比較原始而且並不廣泛應用的設計方法。2.基於規劃的設計=在開發之前思考所有的功能點,每一個關鍵的場景,所...
-
王者榮耀項羽出裝打法攻略
在王者榮耀中項羽的控制能力是獨一無二的,所以想要靠肉盾英雄上分的可以選擇項羽這個英雄練練,作為霸者,項羽擁有着比其他人更強大的實力,作為男人,虞姬是他唯一想守護的女人。下面是YJBYS小編整理的王者榮耀項羽出裝打法推薦,希望對你有幫助!技能分析:項羽的被動技...
-
遊戲設計師能遊戲分析中得到什麼
隨着時代的發展,遊戲分析能夠提供給遊戲工作室中的任何人令人興奮的全新可能性。遊戲分析可以為遊戲開發改頭換面。它們的作用將延伸到測試,QA,社區管理以及盈利等方方面面。這也是我們今天打算討論的內容。希望下文能夠幫助你看清遊戲設計師能夠從分析中得到什麼...
-
dnf跑酷怎麼玩
dnf給大家帶來全新的活動勇士酷跑活動,想要知道活動獎勵和活動玩法嗎,那就一起隨yjbys小編來看看吧。勇士酷跑活動玩法:點擊該NPC後,可入場【勇士酷跑】,(入場後,按C進行跳躍撿取[策劃碎片],最多可跳躍2次,注意躲避機器人,碰到後生命值-3,且人物生命值共有3點。)活動獎勵...