游戏脚本使用经验记录

脚本对游戏有什么用?可以让游戏程序,从各种繁琐重复的游戏逻辑里面解放出来。简单举个例子:一个副本关卡,怪物应该怎么走路,说什么话,放什么技能。这些只要提供了相应的接口之后,脚本策划就可以根据自己的想法任意的发挥。这中间少了沟通成本,也方便游戏策划创意的发挥。另外因为脚本是不需要编译成二进制文件就可以执行的,所以可以用来做热更新(虽然我基本不这样用)

脚本在游戏怎么用?游戏的后台多数使用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


你可能感兴趣的:(游戏脚本使用经验记录)