cocos2dx-lua制作新手引导
最近在项目中负责制作新手引导,有些想法分享一下。
常见的引导类型有点击和对话(剧情),甚至有些对话(剧情)不归属新手引导的范围,但是下文介绍的时候会涉及到剧情方面。
引导的整体逻辑
我的新手引导连贯性是使用事件派发实现,cocos2dx自带的事件派发是跟Node绑定的,所以你需要去找一个lua的事件派发(当然自己写一个更好)。下面的代码中sgEventDispatcher即为我使用的事件派发工具。
新手引导肯定是跟UI层有关联的,这个无法避免所以一定要设置合理的UI节点保证你引导的位置。我这里UI是使用cocosbuilder来拼接的,lua层解析使用的Viewbase基类。在设计UI时,我会在有引导的ccb中设置一个空的Node,并且命名为ccbNodeTutorial, 然后Viewbase解析的时候,如果检测到该节点就会在该Node的”enterTransitionFinish”事件里注册监听引导的监听函数,然后在”exitTransitionStart”取消注册。
function ViewBase:registerListener()
if not tutorialMgr:getTutorialOpenState() then
return
end
self:onNodeEvent("enterTransitionFinish", function()
if self.ccbNodeTutorial then
sgEventDispatcher:registerEventListener("sgeNewTutorial", self.onEventAddTutorial, self)
self:onNodeEvent("exitTransitionStart", self.unregisterListener, self)
sgEventDispatcher:dispatchEvent("sgeStartTutorial")
end
end)
end
function ViewBase:unregisterListener()
sgEventDispatcher:remove("sgeNewTutorial", self.onEventAddTutorial, self)
end
function ViewBase:onEventAddTutorial(event)
if not tutorialMgr:checkCanCreateTutorialView(self) then
return
end
app:showSwallowLayer()