cocos3.0_lua ActionManager 和FadeIn FadeOut

  • Post author:
  • Post category:其他


一、FadeIn FadeOut


local


grossini

= cc.Sprite:create(“g.png”)


ret

:addChild(

grossini

,

0

,

2

)


local


b1b

= cc.Sprite:create(

“res/hd/Images/b1.png”

)


b1b

:setPosition(

0

,

0

)


grossini

:addChild(

b1b

)


grossini

:setCascadeOpacityEnabled(

true

)

— 传递到给子节点,使得子节点也可以随父节点渐隐渐现


grossini

:setPosition(

200

,

200

)



local


function



bugMe


(


node


)




node


:stopAllActions()



–node:runAction(cc.ScaleTo:create(2, 2))

—        local outFade =  cc.FadeOut:create(2)

—        local reoutFade = outFade:reverse()

—        node:runAction(cc.Sequence:create(inFade,reinFade))


end




grossini


:setOpacity(


0


)

–fadein必加这句否则不显示效果,FadeOut 不用加


local


inFade

=  cc.FadeIn:create(

2

)


local


reinFade

=

inFade

:reverse()


grossini

:runAction( cc.RepeatForever:create(cc.Sequence:create(

inFade

,

reinFade

)))

二 、ActionManager


local


function


unpause

(

dt

)


scheduler

:unscheduleScriptEntry(

schedulerEntry

)



schedulerEntry

=


nil


local


node

=

ret

:getChildByTag(

kTagGrossini

)


local


pDirector

= cc.Director:getInstance()


pDirector

:getActionManager():resumeTarget(

node

) — 重启目标动作  pauseTartget 和resumeTarget用法相似


end




local




function



onNodeEvent

(

event

)


if


event

==

“enter”


then


local


s

= cc.Director:getInstance():getWinSize()


local


sprite

= cc.Sprite:create(“hello.png”)


ret

:addChild(

sprite

,

0

,

2

)


grossini

:setPosition(cc.p(

200

,

200

))


local


action

= cc.MoveBy:create(

1

, cc.p(

150

,

0

))


local


pDirector

= cc.Director:getInstance()


pDirector

:getActionManager():addAction(

action

,

grossini

,

true

)

— 参数 1 动作 2 对象 3 是否暂停


schedulerEntry

=

scheduler

:scheduleScriptFunc(

unpause

,

3.0

,

false

)

–参数1 作用函数 2 时间 3 是否暂停 时间调用注册


elseif


event

==

“exit”


then


if


schedulerEntry

~=

nil


then


scheduler

:unscheduleScriptEntry(

schedulerEntry

) 结束时间调度


end


end




ActionManager 的一些api



local


pDirector

= cc.Director:getInstance()


local


test

=

pDirector

:getActionManager()


test

:removeAction(action)

–删除传入动作


test

:

removeAllActionsFromTarget

(node)

–为指定目标伤处所有动作


test

:removeActionByTag(int,node)

–根据标签删除动作


test

:getNumberOfRunningActionsInTarget(node)

–获得目标动作数


test

:pauseAllRunningActions()

–暂停所有动作返回被暂停动作目标集合


test

:removeAllActions()

–删除所有动作


test

:resumeTargets(array)

–重启目标动作组




以下摘抄自

点击打开链接


动作管理类

CCActionManager


是一个管理所有动作的单例,工作原理是:当


CCNode


执行


runAction


时,该函数会





把动作通过动作管理类的

addAction


函数将对象传递给


CCActionManager


的单例,该实例再把这个动作添加到自己的





动作序列中。




动作管理单例通过定时刷新自己的

update


方法,在这个方法中去调用行为序列中每个动作的


step


(暂停的行为不







update


),这些


step


方法再根据自身的完成进度去


update


或是结束行为。





实际上是由动作管理单例驱动的每个动作去更新自己的逻辑,而

runAction


方法只是将行为对象添加进





CCActionManager

的待执行队列。当节点被清除或是行为结束时,动作管理类会自动将动作从队列中删除,不需要程





序员的管理。




一般情况下,不需要使用这个单例来管理动作,可以使用

CCNode


类的


stopAction





stopActionByTag








stopActions

等函数来管理、但是有两种情况需要使用


CCActionManager


类单例:






版权声明:本文为liyoushihaer原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。