遊戲腳本使用經驗記錄

腳本對遊戲有什麼用?可以讓遊戲程序,從各種繁瑣重複的遊戲邏輯裏面解放出來。簡單舉個例子:一個副本關卡,怪物應該怎麼走路,說什麼話,放什麼技能。這些只要提供了相應的接口之後,腳本策劃就可以根據自己的想法任意的發揮。這中間少了溝通成本,也方便遊戲策劃創意的發揮。另外因爲腳本是不需要編譯成二進制文件就可以執行的,所以可以用來做熱更新(雖然我基本不這樣用)

腳本在遊戲怎麼用?遊戲的後臺多數使用c++開發語言,就拿我之前做過的一款端遊爲例子使用了是 luabind第三方庫,這個庫使用起來還算比較方便,網上有下載,但好像不怎麼更新了。但該庫我們在線上應用過一款幾十w在線的端遊,穩定性沒什麼問題。具體的原理就是所有用cpp定義的類接口,都可以註冊到lua腳本環境中,讓腳本調用,同樣腳本定義的函數也可以被cpp調用。下面是一個怪物AI腳本,通過 LUABIND_REGISTER_CLASS_FUNC可以向腳本中註冊對應的cpp類。

Monster.Cpp文件:怪物AI

class CMonsterAI : public CGameAI

{

  public:

      uint32 GetHP();

      uint32 GetMP();

        void AddSkill(uint32 unSkillID, uint16 uLevel); 

        void UseSkill(uint32 unSkillID, uint16 uLevel);

};

向lua註冊cpp類:

  #define LUABIND_REGISTER_CMonsterAI(luaScript) \

      LUABIND_REGISTER_CLASS_BEGIN(luaScript CMonsterAI) \

      LUABIND_REGISTER_CLASS_FUNC(CMonsterAI, GetHP) \

      LUABIND_REGISTER_CLASS_FUNC(CMonsterAI, GetMP) \

      LUABIND_REGISTER_CLASS_FUNC(CMonsterAI, AddSkill) \

       LUABIND_REGISTER_CLASS_FUNC(CMonsterAI, UseSkill) \

       LUABIND_REGISTER_CLASS_END()


monster.Lua文件

function Event_Thinking(nAI)

    local AI = GetMonsterAI(nAI)

    a = AI:GetArray(1)

    if a == 0 then

        AI:SetTimer(0,30000,65535)

        AI:AddSkill(8645,1)

        AI:UseSkill(8645,1)

        AI:SetArray(1,1)

    end

end


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章