--[[
基于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
基于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