Samael

使用Lua管理不同的渠道

最近做的项目需要去接不同渠道. 由于各种因素, 导致逻辑代码里分布了各种 if .. else 去进行不同渠道的需求处理, 时间一长会造成原有的代码逻辑会更加混乱.

为了防止之前的代码更加混乱, 所以把不用渠道的逻辑进行了相对统一的处理, 对于游戏逻辑代码, 只需要使用SDKManager:XXX就可自动调用相应的渠道代码, 如:

SDKManager:getOpenId()

分析

和接SDK的妹子了聊了聊, 基本的SDK都会有以下的功能

实现思路

生成一个基本的SDKManager, 游戏启动时可以从Android的层面去读取出相应的渠道号, 再通过setmetatable把SDKManager转成相应的Manager

生成流程如下:

关键代码

ChannelDic = setmetatable(ChannelDic, { __index = function(t, key) local f = rawget(ChannelDic, key) – 为了防止递归读取要使用rawget return f or DevManager end})


* 生成相应的渠道Manager的代码, 注意: SDKManager里需要做个mock的方法, 防止在游戏逻辑调用时发生错误
``` lua
SDKManager = {
   __channel = "DEV"
}

function SDKManager:InitByChannel(channel)
   SDKManager = setmetatable(ChannelDic[channel], {__index = self}) -- 更新元表
   self.__channel = channel
end

为什么不用table去做也是为了代码的美观性

SDKManager:handleSpecialFunc("DEV", DEVFunc);
SDKManager:handleSpecialFunc("TEST", TESTFunc);
SDKManager:handleSpecialFunc("UC", UCFunc);

个人觉得这样看起来比较整齐一些.

相关资料

LUA程序设计

相关代码


Share this: