根据一般的需求思路,几个小红点一般都会影响整个模块外面的总小红点。
说一下计算外面小红点的两种思路:
#原思路
每次里面有小红点变更的时候,都去刷新一下总小红点。
优点: 爽
缺点: 如果你有一百个子小红点,就很蛋疼了,其他小红点也都要全部计算一遍
#改进的思路
建立一个n长度的布尔类型数组,代表着n个子小红点的是否点亮。
在子小红点更新的时候,把对应的位置为设置成的亮度,然后触发总小红点的更新。总小红点的计算现在不会像思路一那样需要全部计算一次了。
使用lua写一下伪代码吧。(lua中建立数组无需声明长度)
-- 红点管理器代码
RTMgr.RED_DOT_TYPE_A
RTMgr.RED_DOT_TYPE_B
RTMgr.RED_DOT_TYPE_C
local CHILD_RED_DOT_COUNT = 3
RTMgr.RedDotData = {}
function RTMgr.OnLogin()
for i = 1, CHILD_RED_DOT_COUNT do
RTMgr.RedDotData[i] = false
end
end
function RTMgr.IsOutsideRTLight()
for _, light in ipairs(RTMgr.RedDotData) do
if light then
return true
end
end
return false
end
function RTMgr.SetChildRT(lightType, light)
RTMgr.RedDotData[lightType] = light
end
-- 各处子红点更新代码
function xxx.CheckRT()
local light = xxxHelper.GetXXXLight(params)
RTMgr.SetChildRT(RTMgr.RED_DOT_TYPE_A, light)
end