--[[@------------------------------------------------------------------ 说明: 控制人物移动一个小Tip的操作包 作者: deadline ----------------------------------------------------------------------]] NowOperateMove = NowOperateMove or BaseClass(NowOperate) local NowOperateMove = NowOperateMove local GlobalEventSystem = GlobalEventSystem local SceneManager = SceneManager function NowOperateMove:__init(start_time, start_pos, end_pos, is_last_tip,scene_obj) self.type = OperateManager.OperateType.Move self.start_pos = start_pos self.end_pos = end_pos self.is_last_tip = is_last_tip --是否是路径的最后一段 self.scene_obj = scene_obj self.move_end_time = Status.NowTime self.is_end = false self.now_move_count = 0 self.move_end_handle = nil self.is_already_do_move = false --是否已经执行移动操作 end function NowOperateMove:__delete() if self.move_end_handle ~= nil then EventSystem.UnBind(GlobalEventSystem,self.move_end_handle) end if self.change_scene_handle then EventSystem.UnBind(GlobalEventSystem,self.change_scene_handle) end end function NowOperateMove:Init() --先检测能否立即移动再执行该操作 self:DoMoveAction() return true end function NowOperateMove:DoMoveAction( ) self.is_already_do_move = true --监听主角移动结束 local move_end_callback = function ( tip_count ) local scene_obj = self.scene_obj or Scene.Instance:GetMainRole() if scene_obj and scene_obj:GetType() == SceneBaseType.MainRole then self.is_end = true GlobalEventSystem:UnBind(self.move_end_handle) self.move_end_handle = nil end end --切换场景的时候,也要结束当前操作包 local change_scene_func = function() self.is_end = true EventSystem.UnBind(GlobalEventSystem,self.change_scene_handle) self.change_scene_handle = nil end self.move_end_handle = EventSystem.Bind(GlobalEventSystem,SceneEventType.MAIN_ROLE_MOVE_END, move_end_callback) self.change_scene_handle = EventSystem.Bind(GlobalEventSystem,SceneManager.START, change_scene_func) --主角开始移动 local scene_obj = self.scene_obj or Scene.Instance:GetMainRole() self.now_move_count = scene_obj:GetMoveTipCount() + 1 --此处自身计算当前的移动计数, --在主角移动结束事件触发之前产生该值 scene_obj:DoMove(co.MulXYTable(self.end_pos, SceneObj.LogicRealRatio)) end function NowOperateMove:ExcuteImpl(elaspe_time) --如果还未执行移动操作,则在合适的时间执行该操作 if not self.is_already_do_move then self:DoMoveAction() end return self.is_end end