cocos场景管理器-自己用

SceneManager = SceneManager or BaseClass()




SceneManager.SCENE_TRANSITIONS = {
    CROSSFADE       = {cc.TransitionCrossFade, 2},
    FADE            = {cc.TransitionFade, 3, cc.c3b(0, 0, 0)},
    FADEBL          = {cc.TransitionFadeBL, 2},
    FADEDOWN        = {cc.TransitionFadeDown, 2},
    FADETR          = {cc.TransitionFadeTR, 2},
    FADEUP          = {cc.TransitionFadeUp, 2},
    FLIPANGULAR     = {cc.TransitionFlipAngular, 3, cc.TRANSITION_ORIENTATION_LEFT_OVER},
    FLIPX           = {cc.TransitionFlipX, 3, cc.TRANSITION_ORIENTATION_LEFT_OVER},
    FLIPY           = {cc.TransitionFlipY, 3, cc.TRANSITION_ORIENTATION_UP_OVER},
    JUMPZOOM        = {cc.TransitionJumpZoom, 2},
    MOVEINB         = {cc.TransitionMoveInB, 2},
    MOVEINL         = {cc.TransitionMoveInL, 2},
    MOVEINR         = {cc.TransitionMoveInR, 2},
    MOVEINT         = {cc.TransitionMoveInT, 2},
    PAGETURN        = {cc.TransitionPageTurn, 3, false},
    ROTOZOOM        = {cc.TransitionRotoZoom, 2},
    SHRINKGROW      = {cc.TransitionShrinkGrow, 2},
    SLIDEINB        = {cc.TransitionSlideInB, 2},
    SLIDEINL        = {cc.TransitionSlideInL, 2},
    SLIDEINR        = {cc.TransitionSlideInR, 2},
    SLIDEINT        = {cc.TransitionSlideInT, 2},
    SPLITCOLS       = {cc.TransitionSplitCols, 2},
    SPLITROWS       = {cc.TransitionSplitRows, 2},
    TURNOFFTILES    = {cc.TransitionTurnOffTiles, 2},
  ZOOMFLIPANGULAR = {cc.TransitionZoomFlipAngular, 2},
    ZOOMFLIPX       = {cc.TransitionZoomFlipX, 3, cc.TRANSITION_ORIENTATION_LEFT_OVER},
    ZOOMFLIPY       = {cc.TransitionZoomFlipY, 3, cc.TRANSITION_ORIENTATION_UP_OVER},
}
function SceneManager:__init()
if SceneManager.Instance ~= nil then
return
end
print("................")
SceneManager.Instance = self
self.scene_list = {}
self.scene_list.scene_nums= 0
end


function SceneManager:delMe()
for i = #self.scene_list ,2 ,-1 do 
local v = self.scene_list[i]
if v then 
v:delMe()
self.scene_list[i] = nil
end
end
print("Clear All Scene ")
end




--[[
场景入栈
-------------------------------
    @sceneName 场景名
    @transitonScene 过渡动画
    @... 参数。table




]]
function SceneManager:pushSceneWithTransition(sceneName,transitionType, ... )
local nexscene_class = require(sceneName)


local run_scene = self.scene_list[ #self.scene_list ]
ChestError(nexscene_class) --空指针检测
local nextscene = nexscene_class.new(...)
nextscene.__cname = sceneName
self.scene_list.scene_nums = self.scene_list.scene_nums + 1
self.scene_list[ #self.scene_list + 1] = nexScene
print("SceneManager:pushScene ->>>>>>>>>>>>self.scene_list size ", self.scene_list.scene_nums)
if self.scene_list.scene_nums >= 2 then 
local scene = self:converTransitionByType(transitionType,...)
cc.Director:getInstance():pushScene(scene)
end
end


function SceneManager:runScene(sceneName,transitionType, ... )
local nexscene_class = require(sceneName)
local run_scene = self.scene_list[ #self.scene_list ]
ChestError(nexscene_class) --空指针检测
local nextscene = nexscene_class.new(...)
nextscene.__cname = sceneName
self.scene_list.scene_nums = self.scene_list.scene_nums + 1
self.scene_list[#self.scene_list + 1] = nextscene
print("SceneManager:runScene ->>>>>>>>>>>>self.scene_list size ", self.scene_list.scene_nums)
if self.scene_list.scene_nums >= 1 then 
local newScene =  self:getNextRunScene() 
if transitionType then 
newScene = self:converTransitionByType(transitionType,...)
end


ChestError(newScene) --空指针检测


if display.getRunningScene() then 
cc.Director:getInstance():replaceScene(newScene)
return
else
cc.Director:getInstance():runWithScene(newScene)
end
end
end




-- 从栈顶取出下一个场景
function SceneManager:getNextRunScene()
return self.scene_list[ #self.scene_list ] or nil 
end


-- 动作转换
function SceneManager:converTransitionByType(transitionType, ...)
-- 转换相应的大写,注意只传 过度名,去掉cc例如 MOVEINB
local  key = string.upper(tostring(transitionType))
-- 如果是随机的话
if key == "RANDOM" then
local transiton_nums = table.nums(SceneManager.SCENE_TRANSITIONS)
print("SceneManager.....transiton_nums的值",transiton_nums)
key = math.random(1,#transiton_nums)
end


if nil == key then 
return nil
end
local scene_action_cls , count, default = unpack(SceneManager.SCENE_TRANSITIONS[key])
local nextscene = self:getNextRunScene() 
ChestError(nextscene)
local cfg = ...
local scene


if count == 3 then
scene  = scene_action_cls:create(cfg.time,nextscene ,cfg.other or default)
else
scene  = scene_action_cls:create(cfg.time,nextscene)
end
return scene
end




-- 回到主场景--即开始游戏场景
function SceneManager:goToMain()
-- 首先连续出栈
end


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值