cocos-lua-Nodex

来源:互联网 发布:3dsmax2014软件许可证 编辑:程序博客网 时间:2024/05/01 12:46
--[[
 基于Node的扩展。
]]


local c = cc -- 整个脚本最重要就是这里了。。。
local Node = c.Node


--
--触摸事件 枚举
--[[




]]


-- 添加节点到到自己上
function Node:addme(child, zorder, tag)
    if tag then
        self:addChild(child, zorder, tag)
    elseif zorder then
        self:addChild(child, zorder)
    else
        self:addChild(child)
    end
    return self
end


-- 添加自己到指定节点上
function Node:addTo(parent, zorder, tag)
    if tag then
        parent:addChild(self, zorder, tag)
    elseif zorder then
        parent:addChild(self, zorder)
    else
        parent:addChild(self)
    end
    return self
end


-- function Node:setfather(parent)
--     print("你改变了父节点,注意。。。。")
--     parent:setParent(parent)
-- end


function Node:removeSelf()
    self:removeFromParent()
    return self
end


function Node:align(anchorPoint, x, y)
    self:setAnchorPoint(anchorPoint)
    return self:move(x, y)
end


function Node:delObjByName(name)
    self:removeChildByName(name)
end


function Node:show()
    self:setVisible(true)
    return self
end


function Node:hide()
    self:setVisible(false)
    return self
end


function Node:getPos()
    return self:getPosition()
end


function Node:getSize()
    return self:getContentSize()
end


function Node:getRect()
    local rect_t = {['x'] = 0, ['y'] = 0 ,['width'] = 0 ,['height'] = 0 }
    rect_t.x = self:getPos().x
    rect_t.y = self:getPos().y
    rect_t.width = self:getSize().width
    rect_t.height = self:getSize().height
    return rect_t
end


function Node:move(x, y)
    if y then
        self:setPosition(x, y)
    else
        self:setPosition(x)
    end
    return self
end


function Node:moveTo(args)
    transition.moveTo(self, args)
    return self
end






function Node:moveBy(args)
    transition.moveBy(self, args)
    return self
end


function Node:fadeIn(args)
    transition.fadeIn(self, args)
    return self
end


function Node:fadeOut(args)
    transition.fadeOut(self, args)
    return self
end


function Node:fadeTo(args)
    transition.fadeTo(self, args)
    return self
end


function Node:rotate(rotation)
    self:setRotation(rotation)
    return self
end


function Node:rotateTo(args)
    transition.rotateTo(self, args)
    return self
end


function Node:rotateBy(args)
    transition.rotateBy(self, args)
    return self
end


function Node:scaleTo(args)
    transition.scaleTo(self, args)
    return self
end


function Node:onUpdate(callback)
    self:scheduleUpdateWithPriorityLua(callback, 0)
    return self
end


Node.scheduleUpdate = Node.onUpdate


function Node:onNodeEvent(eventName, callback)
    if "enter" == eventName then
        self.onEnterCallback_ = callback
    elseif "exit" == eventName then
        self.onExitCallback_ = callback
    elseif "enterTransitionFinish" == eventName then
        self.onEnterTransitionFinishCallback_ = callback
    elseif "exitTransitionStart" == eventName then
        self.onExitTransitionStartCallback_ = callback
    elseif "cleanup" == eventName then
        self.onCleanupCallback_ = callback
    end
    self:enableNodeEvents()
end


function Node:enableNodeEvents()
    if self.isNodeEventEnabled_ then
        return self
    end


    self:registerScriptHandler(function(state)
        if state == "enter" then
            self:onEnter_()
        elseif state == "exit" then
            self:onExit_()
        elseif state == "enterTransitionFinish" then
            self:onEnterTransitionFinish_()
        elseif state == "exitTransitionStart" then
            self:onExitTransitionStart_()
        elseif state == "cleanup" then
            self:onCleanup_()
        end
    end)
    self.isNodeEventEnabled_ = true


    return self
end


function Node:disableNodeEvents()
    self:unregisterScriptHandler()
    self.isNodeEventEnabled_ = false
    return self
end




function Node:onEnter()
end


function Node:onExit()
end


function Node:onEnterTransitionFinish()
end


function Node:onExitTransitionStart()
end


function Node:onCleanup()
end


function Node:onEnter_()
    self:onEnter()
    if not self.onEnterCallback_ then
        return
    end
    self:onEnterCallback_()
end


function Node:onExit_()
    self:onExit()
    if not self.onExitCallback_ then
        return
    end
    self:onExitCallback_()
end


function Node:onEnterTransitionFinish_()
    self:onEnterTransitionFinish()
    if not self.onEnterTransitionFinishCallback_ then
        return
    end
    self:onEnterTransitionFinishCallback_()
end


function Node:onExitTransitionStart_()
    self:onExitTransitionStart()
    if not self.onExitTransitionStartCallback_ then
        return
    end
    self:onExitTransitionStartCallback_()
end


function Node:onCleanup_()
    self:onCleanup()
    if not self.onCleanupCallback_ then
        return
    end
    self:onCleanupCallback_()
end


--  每秒执行。少用
function Node:schedule_updata(_callback,time,...)
    print("使用了定时器 schedule_updata,你设定的时间为",time)
    local schedule_time = cc.DelayTime:create(time)
    local cc_fun = cc.CallFunc:create(_callback,{time})
    local actions = {[1] = schedule_time , [2] = cc_fun }
    local action_list = transition.sequence(actions)
    local forever = cc.RepeatForever:create(action_list)
    self:runAction(forever)
    return self
end


-- N秒后执行一次。随便怎么用
function Node:schedule_one(_callback,time,...)
    -- body
    print("使用了定时器 schedule_one,你设定的时间为",time)
    local schedule_time = cc.DelayTime:create(time)
    local cc_fun = cc.CallFunc:create(_callback,{time})
    local actions = {[1] = schedule_time , [2] = cc_fun }
    local action_list = transition.sequence(actions)
    self:runAction(action_list)
    return self
end


-- 建议用做时间计算,或者倒计时
-- 是间隔一定时间调用指定的次数,也可以用action实现,但考虑到可能执行某个动作,你stopAllaction了就。。
function Node:scheduler_wait_more(_callback,time,repeat_nums,...)
  print("使用了定时器 scheduler_wait_more,你设定的时间为",time)
  local schedulerID
  local interval = time or 1
  local repeatIndex = repeat_nums or 1
  local index = 0
  local sharedScheduler = cc.Director:getInstance():getScheduler()
  schedulerID = sharedScheduler:scheduleScriptFunc(function()
    index = index + 1
    _callback()
    if index >= repeatIndex then
       cc.Director:getInstance():getScheduler():unscheduleScriptEntry(schedulerID)
    end
  end, interval, false)
  return self
end

0 0
原创粉丝点击