需求:改变大厅的语言不重新绘制大厅界面
1.首先实现消息自定义事件这个类
local GameEvent = class("GameEvent")
GameEvent.EVENT_CHANGE_LANGUAGE = "change_language"
function GameEvent.addEventListener(event_name,func,target) --消息的监听与接收根据自定义的消息名字 响应消息的回调函数与目标
if target == nil then target = app:getRunningScene() end
local ironChangedListener = cc.EventListenerCustom:create(event_name, function(event)
if func then
func(event)
end
end)
target:getEventDispatcher():addEventListenerWithSceneGraphPriority(ironChangedListener, target)
end
function GameEvent.dispatchEvent(event_name,args) --发送消息根据消息名字
local event = cc.EventCustom:new(event_name)
if type(args) == "table" then
for k,v in pairs(args or {}) do
event[k] = v
end
end
cc.Director:getInstance():getEventDispatcher():dispatchEvent(event)
end
return GameEvent
2.游戏进入的时候init.lua 就将GameEvent 声明一个全局变量
cc.exports.GameEvent = require("app.utils.event.GameEvent")
app.utils.event是第一步中GameEvent类的位置
3.在语言设置按钮回调函数中分发事件:
GameEvent.dispatchEvent(GameEvent.EVENT_CHANGE_LANGUAGE)
4.在大厅场景中实现监听
GameEvent.addEventListener(GameEvent.EVENT_CHANGE_LANGUAGE,handler(self, self.changeLanguage),self)
handler(self, self.changeLanguage)为事件回调函数 changeLanguage 方法为具体改变大厅中那些资源的方法