安卓游戲腳本實現原理
A. 游戲中實現腳本控制的干貨分享
游戲中實現腳本控制的干貨分享
一個游戲引擎做好了,最重要的是缺什麼?腳本。打個比方,游戲引擎是一部電腦,則腳本就是電腦的軟體。既然腳本這么重要,那該怎樣實現呢?下面我就來說說自己的做法。想了解更多相關資訊請持續關注我們應屆畢業生培訓網。
首先理解一下消息循環
一個好的游戲離不開好的消息循環。它是游戲實現很重要的一部分。
首先,我定義了一個全局變數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就是負責這項工作的。
;B. 游戲腳本自動升級原理
腳本語言的工作原理就是每一次啟動游戲時都要在伺服器上檢測一下有沒有程序腳本更新,有就從伺服器上把腳本下載到本地客戶端,下載完以後客戶端啟動時就會把腳本載入到內存里執行。
C. 游戲中常說的用腳本是什麼意思
腳本簡單地說就是一條條的文字命令,這些文字命令是可以看到的,腳本程序在執行時,是由系統的一個解釋器,將其一條條的翻譯成機器可識別的指令,並按程序順序執行。
因為腳本在執行時多了一道翻譯的過程,所以它比二進製程序執行效率要稍低一些。
游戲腳本的意思,就是一個模擬滑鼠、鍵盤的程序。
比如玩家要按一下A鍵, 移動滑鼠點擊一下。這個動作,用腳本可以直接幫玩家執行,省了手動操作。但使用游戲腳本在游戲中是作弊行為,會嚴重影響其他玩家的體驗,因此需要嚴厲抵制。
(3)安卓游戲腳本實現原理擴展閱讀:
腳本的編寫都是採用某一種編程語言。
如 LoadRunnert 測試工具用的 C 語言;WebLoadt 測試工具用 JavaScript 或者是接近編程語言的方式;Robot 測試工具用SQABasic, 一種類似於VB的語言;
QTPt 測試工具所用到的是VBScript;WinRunnert 測試工具所用到的是類 C 的語言。這些測試腳本的易讀性相對較低,編寫相對復雜, 當設備的功能需求發生變化時,測試腳本不易被維護。
常見的腳本語言有:Scala、JavaScript,VBScript,ActionScript,MAX Script,ASP,JSP,PHP,SQL,Perl,Shell,Python,Ruby,JavaFX,Lua,AutoIt等。
D. 手機游戲腳本是什麼原理
腳本(script)是使用一種特定的描述性語言,依據一定的格式編寫的可執行文件,又稱作宏或批處理文件。
每個游戲的腳本位置會有不同。
你說的要改編單機模式,那個是游戲源代碼,
有了代碼才可以把你玩的游戲改編,所以游戲代碼很值錢的!
游戲整個就是靠語言代碼編譯來完成的。
E. 安卓手機 像吹裙子,吹蒲公英之類的游戲或軟體,使用的是什麼原理(聽筒真的能感應人吹的氣流嗎)
通過聲音感應的,比如吹吹肺活量等,都是
F. 什麼是游戲腳本
游戲腳本的意思,就是一個模擬滑鼠、鍵盤的程序,修改需要模擬器。
比如玩家要按一下A鍵, 移動滑鼠點擊一下。這個動作,用腳本可以直接幫玩家執行,省了手動操作。但使用游戲腳本在游戲中是作弊行為,會嚴重影響其他玩家的體驗,因此需要嚴厲抵制。
游戲腳本原理
一個游戲的任務,需要在不同的手機屏幕上進行一系列點擊,滑動,甚至輸入文本,發送語音等動作後才能完成,而這一切操作其實就是手機中會記錄這些動作的文件,文件存儲的是一個又一個的信號量。
這些信號然後根據不同廠商的設定反饋給上層,而上層會根據反饋的信息轉換成統一識別的事件,事件最後響應給應用,並對信息進行相應的處理,最後呈現給用戶並實現它,這一些列的動作都是可以通過一些現有的工具或者說解決方案來幫實現自動游戲的功能。
G. 你們知道手機游戲腳本是用什麼做的嗎
可以在網上報名學習