local size = cc.Director:getInstance():getWinSize() local function initWithLayer(layer) grossini = cc.Sprite:create(s_pPathGrossini) tamara = cc.Sprite:create(s_pPathSister1) kathia = cc.Sprite:create(s_pPathSister2) layer:addChild(grossini, 1) layer:addChild(tamara, 2) layer:addChild(kathia, 3) grossini:setPosition(cc.p(size.width / 2, size.height / 3)) tamara:setPosition(cc.p(size.width / 2, 2 * size.height / 3)) kathia:setPosition(cc.p(size.width / 2, size.height / 2)) Helper.initWithLayer(layer) end local function centerSprites(numberOfSprites) if numberOfSprites == 0 then tamara:setVisible(false) kathia:setVisible(false) grossini:setVisible(false) elseif numberOfSprites == 1 then tamara:setVisible(false) kathia:setVisible(false) grossini:setPosition(cc.p(size.width / 2, size.height / 2)) elseif numberOfSprites == 2 then kathia:setPosition(cc.p(size.width / 3, size.height / 2)) tamara:setPosition(cc.p(2 * size.width / 3, size.height / 2)) grossini:setVisible(false) elseif numberOfSprites == 3 then grossini:setPosition(cc.p(size.width / 2, size.height / 2)) tamara:setPosition(cc.p(size.width / 4, size.height / 2)) kathia:setPosition(cc.p(3 * size.width / 4, size.height / 2)) end end local function alignSpritesLeft(numberOfSprites) if numberOfSprites == 1 then tamara:setVisible(false) kathia:setVisible(false) grossini:setPosition(cc.p(60, size.height / 2)) elseif numberOfSprites == 2 then kathia:setPosition(cc.p(60, size.height / 3)) tamara:setPosition(cc.p(60, 2 * size.height / 3)) grossini:setVisible(false) elseif numberOfSprites == 3 then grossini:setPosition(cc.p(60, size.height / 2)) tamara:setPosition(cc.p(60, 2 * size.height / 3)) kathia:setPosition(cc.p(60, size.height / 3)) end end -------------------------------------- -- ActionManual -------------------------------------- local function ActionManual() local layer = cc.Layer:create() initWithLayer(layer) tamara:setScaleX(2.5) tamara:setScaleY(-1.0) tamara:setPosition(cc.p(100, 70)) tamara:setOpacity(128) grossini:setRotation(120) grossini:setPosition(cc.p(size.width / 2, size.height / 2)) grossini:setColor(cc.c3b(255, 0, 0)) kathia:setPosition(cc.p(size.width - 100, size.height / 2)) kathia:setColor(cc.c3b(0, 0, 255)) Helper.subtitleLabel:setString("Manual Transformation") return layer end -------------------------------------- -- ActionMove -------------------------------------- local function ActionMove() local layer = cc.Layer:create() initWithLayer(layer) centerSprites(3) local actionBy = cc.MoveBy:create(2, cc.p(80, 80)) local actionByBack = actionBy:reverse() tamara:runAction(cc.MoveTo:create(2, cc.p(size.width - 40, size.height - 40))) grossini:runAction(cc.Sequence:create(actionBy, actionByBack)) kathia:runAction(cc.MoveTo:create(1, cc.p(40, 40))) Helper.subtitleLabel:setString("MoveTo / MoveBy") return layer end -------------------------------------- -- ActionScale -------------------------------------- local function ActionScale() local layer = cc.Layer:create() initWithLayer(layer) centerSprites(3) local actionTo = cc.ScaleTo:create(2.0, 0.5) local actionBy = cc.ScaleBy:create(2.0, 1.0, 10.0) local actionBy2 = cc.ScaleBy:create(2.0, 5.0, 1.0) grossini:runAction(actionTo) tamara:runAction(cc.Sequence:create(actionBy, actionBy:reverse())) kathia:runAction(cc.Sequence:create(actionBy2, actionBy2:reverse())) Helper.subtitleLabel:setString("ScaleTo / ScaleBy") return layer end -------------------------------------- -- ActionRotate -------------------------------------- local function ActionRotate() local layer = cc.Layer:create() initWithLayer(layer) centerSprites(3) local actionTo = cc.RotateTo:create( 2, 45) local actionTo2 = cc.RotateTo:create( 2, -45) local actionTo0 = cc.RotateTo:create(2 , 0) tamara:runAction(cc.Sequence:create(actionTo, actionTo0)) local actionBy = cc.RotateBy:create(2 , 360) local actionByBack = actionBy:reverse() grossini:runAction(cc.Sequence:create(actionBy, actionByBack)) local action0Retain = cc.RotateTo:create(2 , 0) kathia:runAction(cc.Sequence:create(actionTo2, action0Retain)) Helper.subtitleLabel:setString("RotateTo / RotateBy") return layer end -------------------------------------- -- ActionSkew -------------------------------------- local function ActionSkew() local layer = cc.Layer:create() initWithLayer(layer) centerSprites(3) local actionTo = cc.SkewTo:create(2, 37.2, -37.2) local actionToBack = cc.SkewTo:create(2, 0, 0) local actionBy = cc.SkewBy:create(2, 0.0, -90.0) local actionBy2 = cc.SkewBy:create(2, 45.0, 45.0) local actionByBack = actionBy:reverse() tamara:runAction(cc.Sequence:create(actionTo, actionToBack)) grossini:runAction(cc.Sequence:create(actionBy, actionByBack)) kathia:runAction(cc.Sequence:create(actionBy2, actionBy2:reverse())) Helper.subtitleLabel:setString("SkewTo / SkewBy") return layer end --ActionRotationalSkewVSStandardSkew local function ActionRotationalSkewVSStandardSkew() local layer = cc.Layer:create() initWithLayer(layer) tamara:removeFromParent(true); grossini:removeFromParent(true); kathia:removeFromParent(true); local s = cc.Director:getInstance():getWinSize(); local boxSize = cc.size(100.0, 100.0); local box = cc.LayerColor:create(cc.c4b(255,255,0,255)); box:setAnchorPoint(cc.p(0.5,0.5)); box:setContentSize( boxSize ); box:ignoreAnchorPointForPosition(false); box:setPosition(cc.p(s.width/2, s.height - 100 - box:getContentSize().height/2)); layer:addChild(box); local label = cc.LabelTTF:create("Standard cocos2d Skew", "Marker Felt", 16); label:setPosition(cc.p(s.width/2, s.height - 100 + label:getContentSize().height)); layer:addChild(label); local actionTo = cc.SkewBy:create(2, 360, 0); local actionToBack = cc.SkewBy:create(2, -360, 0); local seq = cc.Sequence:create(actionTo, actionToBack) box:runAction(seq); box = cc.LayerColor:create(cc.c4b(255,255,0,255)); box:setAnchorPoint(cc.p(0.5,0.5)); box:setContentSize(boxSize); box:ignoreAnchorPointForPosition(false); box:setPosition(cc.p(s.width/2, s.height - 250 - box:getContentSize().height/2)); layer:addChild(box); label = cc.LabelTTF:create("Rotational Skew", "Marker Felt", 16); label:setPosition(cc.p(s.width/2, s.height - 250 + label:getContentSize().height/2)); layer:addChild(label); local actionTo2 = cc.RotateBy:create(2, 360); local actionToBack2 = cc.RotateBy:create(2, -360); seq = cc.Sequence:create(actionTo2, actionToBack2) box:runAction(seq); Helper.subtitleLabel:setString("Skew Comparison") return layer; end -------------------------------------- -- ActionSkewRotate -------------------------------------- local function ActionSkewRotate() local layer = cc.Layer:create() initWithLayer(layer) tamara:removeFromParent(true) grossini:removeFromParent(true) kathia:removeFromParent(true) local boxSize = cc.size(100.0, 100.0) local box = cc.LayerColor:create(cc.c4b(255, 255, 0, 255)) box:setAnchorPoint(cc.p(0, 0)) box:setPosition(190, 110) box:setContentSize(boxSize) local markrside = 10.0 local uL = cc.LayerColor:create(cc.c4b(255, 0, 0, 255)) box:addChild(uL) uL:setContentSize(cc.size(markrside, markrside)) uL:setPosition(0, boxSize.height - markrside) uL:setAnchorPoint(cc.p(0, 0)) local uR = cc.LayerColor:create(cc.c4b(0, 0, 255, 255)) box:addChild(uR) uR:setContentSize(cc.size(markrside, markrside)) uR:setPosition(boxSize.width - markrside, boxSize.height - markrside) uR:setAnchorPoint(cc.p(0, 0)) layer:addChild(box) local actionTo = cc.SkewTo:create(2, 0, 2) local rotateTo = cc.RotateTo:create(2, 61.0) local actionScaleTo = cc.ScaleTo:create(2, -0.44, 0.47) local actionScaleToBack = cc.ScaleTo:create(2, 1.0, 1.0) local rotateToBack = cc.RotateTo:create(2, 0) local actionToBack = cc.SkewTo:create(2, 0, 0) box:runAction(cc.Sequence:create(actionTo, actionToBack)) box:runAction(cc.Sequence:create(rotateTo, rotateToBack)) box:runAction(cc.Sequence:create(actionScaleTo, actionScaleToBack)) Helper.subtitleLabel:setString("Skew + Rotate + Scale") return layer end -------------------------------------- -- ActionJump -------------------------------------- local function ActionJump() local layer = cc.Layer:create() initWithLayer(layer) centerSprites(3) local actionTo = cc.JumpTo:create(2, cc.p(300,300), 50, 4) local actionBy = cc.JumpBy:create(2, cc.p(300,0), 50, 4) local actionUp = cc.JumpBy:create(2, cc.p(0,0), 80, 4) local actionByBack = actionBy:reverse() tamara:runAction(actionTo) grossini:runAction(cc.Sequence:create(actionBy, actionByBack)) kathia:runAction(cc.RepeatForever:create(actionUp)) Helper.subtitleLabel:setString("JumpTo / JumpBy") return layer end -------------------------------------- -- ActionCardinalSpline -------------------------------------- local function ActionCardinalSpline() local layer = cc.Layer:create() initWithLayer(layer) centerSprites(2) local array = { cc.p(0, 0), cc.p(size.width / 2 - 30, 0), cc.p(size.width / 2 - 30, size.height - 80), cc.p(0, size.height - 80), cc.p(0, 0), } local action = cc.CardinalSplineBy:create(3, array, 0) local reverse = action:reverse() local seq = cc.Sequence:create(action, reverse) tamara:setPosition(cc.p(50, 50)) tamara:runAction(seq) local action2 = cc.CardinalSplineBy:create(3, array, 1) local reverse2 = action2:reverse() local seq2 = cc.Sequence:create(action2, reverse2) kathia:setPosition(cc.p(size.width / 2, 50)) kathia:runAction(seq2) --[[ local function drawCardinalSpline() kmGLPushMatrix() kmGLTranslatef(50, 50, 0) cc.DrawPrimitives.ccDrawCardinalSpline(array, 0, 100) kmGLPopMatrix() kmGLPushMatrix() kmGLTranslatef(size.width / 2, 50, 0) cc.DrawPrimitives.ccDrawCardinalSpline(array, 1, 100) kmGLPopMatrix() end array:retain() local glNode = gl.glNodeCreate() glNode:setContentSize(cc.size(size.width, size.height)) glNode:setAnchorPoint(cc.p(0.5, 0.5)) glNode:registerScriptDrawHandler(drawCardinalSpline) layer:addChild(glNode,-10) glNode:setPosition( size.width / 2, size.height / 2) ]]-- Helper.titleLabel:setString("CardinalSplineBy / CardinalSplineAt") Helper.subtitleLabel:setString("Cardinal Spline paths.\nTesting different tensions for one array") return layer end -------------------------------------- -- ActionCatmullRom -------------------------------------- local function ActionCatmullRom() local layer = cc.Layer:create() initWithLayer(layer) centerSprites(2) tamara:setPosition(cc.p(50, 50)) local array = { cc.p(0, 0), cc.p(80, 80), cc.p(size.width - 80, 80), cc.p(size.width - 80, size.height - 80), cc.p(80, size.height - 80), cc.p(80, 80), cc.p(size.width / 2, size.height / 2), } local action = cc.CatmullRomBy:create(3, array) local reverse = action:reverse() local seq = cc.Sequence:create(action, reverse) tamara:runAction(seq) local array2 = { cc.p(size.width / 2, 30), cc.p(size.width -80, 30), cc.p(size.width - 80, size.height - 80), cc.p(size.width / 2, size.height - 80), cc.p(size.width / 2, 30), } local action2 = cc.CatmullRomTo:create(3, array2) local reverse2 = action2:reverse() local seq2 = cc.Sequence:create(action2, reverse2) kathia:runAction(seq2) --[[ local function drawCatmullRom() kmGLPushMatrix() kmGLTranslatef(50, 50, 0) cc.DrawPrimitives.ccDrawCatmullRom(array, 50) kmGLPopMatrix() cc.DrawPrimitives.ccDrawCatmullRom(array2,50) end array:retain() array2:retain() local glNode = gl.glNodeCreate() glNode:setContentSize(cc.size(size.width, size.height)) glNode:setAnchorPoint(cc.p(0.5, 0.5)) glNode:registerScriptDrawHandler(drawCatmullRom) layer:addChild(glNode,-10) glNode:setPosition( size.width / 2, size.height / 2) ]]-- Helper.titleLabel:setString("CatmullRomBy / CatmullRomTo") Helper.subtitleLabel:setString("Catmull Rom spline paths. Testing reverse too") return layer end -------------------------------------- -- ActionBezier -------------------------------------- local function ActionBezier() local layer = cc.Layer:create() initWithLayer(layer) centerSprites(3) -- sprite 1 --[[ local bezier = ccBezierConfig() bezier.controlPoint_1 = cc.p(0, size.height / 2) bezier.controlPoint_2 = cc.p(300, - size.height / 2) bezier.endPosition = cc.p(300, 100) ]]-- local bezier = { cc.p(0, size.height / 2), cc.p(300, - size.height / 2), cc.p(300, 100), } local bezierForward = cc.BezierBy:create(3, bezier) local bezierBack = bezierForward:reverse() local rep = cc.RepeatForever:create(cc.Sequence:create(bezierForward, bezierBack)) -- sprite 2 tamara:setPosition(cc.p(80,160)) --[[ local bezier2 = ccBezierConfig() bezier2.controlPoint_1 = cc.p(100, size.height / 2) bezier2.controlPoint_2 = cc.p(200, - size.height / 2) bezier2.endPosition = cc.p(240, 160) ]]-- local bezier2 ={ cc.p(100, size.height / 2), cc.p(200, - size.height / 2), cc.p(240, 160) } local bezierTo1 = cc.BezierTo:create(2, bezier2) -- sprite 3 kathia:setPosition(cc.p(400,160)) local bezierTo2 = cc.BezierTo:create(2, bezier2) grossini:runAction(rep) tamara:runAction(bezierTo1) kathia:runAction(bezierTo2) Helper.subtitleLabel:setString("BezierTo / BezierBy") return layer end -------------------------------------- -- ActionBlink -------------------------------------- local function ActionBlink() local layer = cc.Layer:create() initWithLayer(layer) centerSprites(2) local action1 = cc.Blink:create(2, 10) local action2 = cc.Blink:create(2, 5) tamara:runAction(action1) kathia:runAction(action2) Helper.subtitleLabel:setString("Blink") return layer end -------------------------------------- -- ActionFade -------------------------------------- local function ActionFade() local layer = cc.Layer:create() initWithLayer(layer) centerSprites(2) tamara:setOpacity(0) local action1 = cc.FadeIn:create(1) local action1Back = action1:reverse() local action2 = cc.FadeOut:create(1) local action2Back = action2:reverse() tamara:runAction(cc.Sequence:create( action1, action1Back)) kathia:runAction(cc.Sequence:create( action2, action2Back)) Helper.subtitleLabel:setString("FadeIn / FadeOut") return layer end -------------------------------------- -- ActionTint -------------------------------------- local function ActionTint() local layer = cc.Layer:create() initWithLayer(layer) centerSprites(2) local action1 = cc.TintTo:create(2, 255, 0, 255) local action2 = cc.TintBy:create(2, -127, -255, -127) local action2Back = action2:reverse() tamara:runAction(action1) kathia:runAction(cc.Sequence:create(action2, action2Back)) Helper.subtitleLabel:setString("TintTo / TintBy") return layer end -------------------------------------- -- ActionAnimate -------------------------------------- local function ActionAnimate() local layer = cc.Layer:create() initWithLayer(layer) centerSprites(3) local animation = cc.Animation:create() local number, name for i = 1, 14 do if i < 10 then number = "0"..i else number = i end name = "Images/grossini_dance_"..number..".png" animation:addSpriteFrameWithFile(name) end -- should last 2.8 seconds. And there are 14 frames. animation:setDelayPerUnit(2.8 / 14.0) animation:setRestoreOriginalFrame(true) local action = cc.Animate:create(animation) grossini:runAction(cc.Sequence:create(action, action:reverse())) local cache = cc.AnimationCache:getInstance() cache:addAnimations("animations/animations-2.plist") local animation2 = cache:getAnimation("dance_1") local action2 = cc.Animate:create(animation2) tamara:runAction(cc.Sequence:create(action2, action2:reverse())) local animation3 = animation2:clone() -- problem tolua.cast(animation3,"Animation"):setLoops(4) local action3 = cc.Animate:create(animation3) kathia:runAction(action3) Helper.titleLabel:setString("Animation") Helper.subtitleLabel:setString("Center: Manual animation. Border: using file format animation") return layer end -------------------------------------- -- ActionSequence -------------------------------------- local function ActionSequence() local layer = cc.Layer:create() initWithLayer(layer) alignSpritesLeft(1) local action = cc.Sequence:create( cc.MoveBy:create(2, cc.p(240,0)), cc.RotateBy:create(2, 540)) grossini:runAction(action) Helper.subtitleLabel:setString("Sequence: Move + Rotate") return layer end -------------------------------------- -- ActionSequence2 -------------------------------------- local actionSequenceLayer = nil local function ActionSequenceCallback1() local label = cc.LabelTTF:create("callback 1 called", "Marker Felt", 16) label:setPosition(size.width / 4, size.height / 2) actionSequenceLayer:addChild(label) end local function ActionSequenceCallback2(sender) local label = cc.LabelTTF:create("callback 2 called", "Marker Felt", 16) label:setPosition(cc.p(size.width / 4 * 2, size.height / 2)) actionSequenceLayer:addChild(label) end local function ActionSequenceCallback3(sender) local label = cc.LabelTTF:create("callback 3 called", "Marker Felt", 16) label:setPosition(cc.p(size.width / 4 * 3, size.height / 2)) actionSequenceLayer:addChild(label) end local function ActionSequence2() actionSequenceLayer = cc.Layer:create() initWithLayer(actionSequenceLayer) alignSpritesLeft(1) grossini:setVisible(false) local action = cc.Sequence:create(cc.Place:create(cc.p(200,200)),cc.Show:create(),cc.MoveBy:create(1, cc.p(100,0)), cc.CallFunc:create(ActionSequenceCallback1),cc.CallFunc:create(ActionSequenceCallback2),cc.CallFunc:create(ActionSequenceCallback3)) grossini:runAction(action) Helper.subtitleLabel:setString("Sequence of InstantActions") return actionSequenceLayer end -------------------------------------- -- ActionSpawn -------------------------------------- local function ActionSpawn() local layer = cc.Layer:create() initWithLayer(layer) alignSpritesLeft(1) local action = cc.Spawn:create( cc.JumpBy:create(2, cc.p(300,0), 50, 4), cc.RotateBy:create( 2, 720)) grossini:runAction(action) Helper.subtitleLabel:setString("Spawn: Jump + Rotate") return layer end -------------------------------------- -- ActionReverse -------------------------------------- local function ActionReverse() local layer = cc.Layer:create() initWithLayer(layer) alignSpritesLeft(1) local jump = cc.JumpBy:create(2, cc.p(300,0), 50, 4) local action = cc.Sequence:create(jump, jump:reverse()) grossini:runAction(action) Helper.subtitleLabel:setString("Reverse an action") return layer end -------------------------------------- -- ActionDelaytime -------------------------------------- local function ActionDelaytime() local layer = cc.Layer:create() initWithLayer(layer) alignSpritesLeft(1) local move = cc.MoveBy:create(1, cc.p(150,0)) local action = cc.Sequence:create(move, cc.DelayTime:create(2), move) grossini:runAction(action) Helper.subtitleLabel:setString("DelayTime: m + delay + m") return layer end -------------------------------------- -- ActionRepeat -------------------------------------- local function ActionRepeat() local layer = cc.Layer:create() initWithLayer(layer) alignSpritesLeft(2) local a1 = cc.MoveBy:create(1, cc.p(150,0)) local action1 = cc.Repeat:create(cc.Sequence:create(cc.Place:create(cc.p(60,60)), a1), 3) local a2 = cc.MoveBy:create(1, cc.p(150,0)) local action2 = cc.RepeatForever:create(cc.Sequence:create(a2, a1:reverse())) kathia:runAction(action1) tamara:runAction(action2) Helper.subtitleLabel:setString("Repeat / RepeatForever actions") return layer end -------------------------------------- -- ActionRepeatForever -------------------------------------- local function repeatForever(sender) local repeatAction = cc.RepeatForever:create(cc.RotateBy:create(1.0, 360)) sender:runAction(repeatAction) end local function ActionRepeatForever() local layer = cc.Layer:create() initWithLayer(layer) centerSprites(1) local action = cc.Sequence:create( cc.DelayTime:create(1), cc.CallFunc:create(repeatForever) ) grossini:runAction(action) Helper.subtitleLabel:setString("CallFuncN + RepeatForever") return layer end -------------------------------------- -- ActionRotateToRepeat -------------------------------------- local function ActionRotateToRepeat() local layer = cc.Layer:create() initWithLayer(layer) centerSprites(2) local act1 = cc.RotateTo:create(1, 90) local act2 = cc.RotateTo:create(1, 0) local seq = cc.Sequence:create(act1, act2) local rep1 = cc.RepeatForever:create(seq) local rep2 = cc.Repeat:create(tolua.cast(seq:clone(), "Sequence"), 10) tamara:runAction(rep1) kathia:runAction(rep2) Helper.subtitleLabel:setString("Repeat/RepeatForever + RotateTo") return layer end -------------------------------------- -- ActionRotateJerk -------------------------------------- local function ActionRotateJerk() local layer = cc.Layer:create() initWithLayer(layer) centerSprites(2) local seq = cc.Sequence:create( cc.RotateTo:create(0.5, -20), cc.RotateTo:create(0.5, 20)) local rep1 = cc.Repeat:create(seq, 10) local seq2 = cc.Sequence:create( cc.RotateTo:create(0.5, -20), cc.RotateTo:create(0.5, 20)) local rep2 = cc.RepeatForever:create(seq2) tamara:runAction(rep1) kathia:runAction(rep2) Helper.subtitleLabel:setString("RepeatForever / Repeat + Rotate") return layer end -------------------------------------- -- ActionCallFunc -------------------------------------- local callFuncLayer = nil local function CallFucnCallback1() local label = cc.LabelTTF:create("callback 1 called", "Marker Felt", 16) label:setPosition(size.width / 4, size.height / 2) callFuncLayer:addChild(label) end local function CallFucnCallback2(sender) local label = cc.LabelTTF:create("callback 2 called", "Marker Felt", 16) label:setPosition(size.width / 4 * 2, size.height / 2) callFuncLayer:addChild(label) end local function CallFucnCallback3(sender) local label = cc.LabelTTF:create("callback 3 called", "Marker Felt", 16) label:setPosition(size.width / 4 * 3, size.height / 2) callFuncLayer:addChild(label) end local function ActionCallFunc() callFuncLayer = cc.Layer:create() initWithLayer(callFuncLayer) centerSprites(3) local action = cc.Sequence:create( cc.MoveBy:create(2, cc.p(200,0)), cc.CallFunc:create(CallFucnCallback1) ) local action2 = cc.Sequence:create(cc.ScaleBy:create(2, 2),cc.FadeOut:create(2),cc.CallFunc:create(CallFucnCallback2)) local action3 = cc.Sequence:create(cc.RotateBy:create(3 , 360),cc.FadeOut:create(2),cc.CallFunc:create(CallFucnCallback3)) grossini:runAction(action) tamara:runAction(action2) kathia:runAction(action3) Helper.subtitleLabel:setString("Callbacks: CallFunc and friends") return callFuncLayer end -------------------------------------- -- ActionCallFuncND * -- problem: the current luaEngine doesn't support -- passing more than one param to lua script -------------------------------------- local function ActionCallFuncND() local layer = cc.Layer:create() initWithLayer(layer) centerSprites(1) Helper.titleLabel:setString("CallFuncND + auto remove") Helper.subtitleLabel:setString("CallFuncND + removeFromParent. Grossini dissapears in 2s") return layer end -------------------------------------- -- ActionReverseSequence -------------------------------------- local function ActionReverseSequence() local layer = cc.Layer:create() initWithLayer(layer) alignSpritesLeft(1) local move1 = cc.MoveBy:create(1, cc.p(250,0)) local move2 = cc.MoveBy:create(1, cc.p(0,50)) local seq = cc.Sequence:create(move1, move2, move1:reverse()) local action = cc.Sequence:create(seq, seq:reverse()) grossini:runAction(action) Helper.subtitleLabel:setString("Reverse a sequence") return layer end -------------------------------------- -- ActionReverseSequence2 -------------------------------------- local function ActionReverseSequence2() local layer = cc.Layer:create() initWithLayer(layer) alignSpritesLeft(2) -- Test: -- Sequence should work both with IntervalAction and InstantActions local move1 = cc.MoveBy:create(1, cc.p(250,0)) local move2 = cc.MoveBy:create(1, cc.p(0,50)) local tog1 = cc.ToggleVisibility:create() local tog2 = cc.ToggleVisibility:create() local seq = cc.Sequence:create(move1, tog1, move2, tog2, move1:reverse()) local action = cc.Repeat:create(cc.Sequence:create(seq, seq:reverse()), 3) -- Test: -- Also test that the reverse of Hide is Show, and vice-versa kathia:runAction(action) local move_tamara = cc.MoveBy:create(1, cc.p(100,0)) local move_tamara2 = cc.MoveBy:create(1, cc.p(50,0)) local hide = cc.Hide:create() local seq_tamara = cc.Sequence:create(move_tamara, hide, move_tamara2) local seq_back = seq_tamara:reverse() tamara:runAction(cc.Sequence:create(seq_tamara, seq_back)) Helper.subtitleLabel:setString("Reverse a sequence2") return layer end -------------------------------------- -- ActionOrbit -------------------------------------- local function ActionOrbit() local layer = cc.Layer:create() initWithLayer(layer) centerSprites(3) local orbit1 = cc.OrbitCamera:create(2,1, 0, 0, 180, 0, 0) local action1 = cc.Sequence:create(orbit1, orbit1:reverse()) local orbit2 = cc.OrbitCamera:create(2,1, 0, 0, 180, -45, 0) local action2 = cc.Sequence:create(orbit2, orbit2:reverse()) local orbit3 = cc.OrbitCamera:create(2,1, 0, 0, 180, 90, 0) local action3 = cc.Sequence:create(orbit3, orbit3:reverse()) kathia:runAction(cc.RepeatForever:create(action1)) tamara:runAction(cc.RepeatForever:create(action2)) grossini:runAction(cc.RepeatForever:create(action3)) local move = cc.MoveBy:create(3, cc.p(100,-100)) local move_back = move:reverse() local seq = cc.Sequence:create(move, move_back) local rfe = cc.RepeatForever:create(seq) kathia:runAction(rfe) tamara:runAction(tolua.cast(rfe:clone(), "ActionInterval")) grossini:runAction(tolua.cast(rfe:clone(), "ActionInterval")) Helper.subtitleLabel:setString("OrbitCamera action") return layer end -------------------------------------- -- ActionFollow -------------------------------------- local function ActionFollow() local layer = cc.Layer:create() initWithLayer(layer) centerSprites(1) grossini:setPosition(cc.p(-200, size.height / 2)) local move = cc.MoveBy:create(2, cc.p(size.width * 3, 0)) local move_back = move:reverse() local seq = cc.Sequence:create(move, move_back) local rep = cc.RepeatForever:create(seq) grossini:runAction(rep) layer:runAction(cc.Follow:create(grossini, cc.rect(0, 0, size.width * 2 - 100, size.height))) local function draw() local winSize = cc.Director:getInstance():getWinSize() local x = winSize.width * 2 - 100 local y = winSize.height local vertices = { cc.p(5, 5), cc.p(x - 5, 5), cc.p(x - 5,y - 5), cc.p(5,y - 5) } cc.DrawPrimitives.ccDrawPoly(vertices, 4, true) end local glNode = gl.glNodeCreate() glNode:setContentSize(cc.size(size.width, size.height)) glNode:setAnchorPoint(cc.p(0.5, 0.5)) glNode:registerScriptDrawHandler(draw) layer:addChild(glNode,-10) glNode:setPosition( size.width / 2, size.height / 2) Helper.subtitleLabel:setString("Follow action") return layer end -------------------------------------- -- ActionTargeted -------------------------------------- local function ActionTargeted() local layer = cc.Layer:create() initWithLayer(layer) centerSprites(2) local jump1 = cc.JumpBy:create(2, cc.p(0, 0), 100, 3) local jump2 = cc.JumpBy:create(2, cc.p(0, 0), 100, 3) local rot1 = cc.RotateBy:create(1, 360) local rot2 = cc.RotateBy:create(1, 360) local t1 = cc.TargetedAction:create(kathia, jump2) local t2 = cc.TargetedAction:create(kathia, rot2) local seq = cc.Sequence:create(jump1, t1, rot1, t2) local always = cc.RepeatForever:create(seq) tamara:runAction(always) Helper.titleLabel:setString("ActionTargeted") Helper.subtitleLabel:setString("Action that runs on another target. Useful for sequences") return layer end -------------------------------------- -- PauseResumeActions * -- problem: schedule feature is constructing -------------------------------------- local pausedTargets = nil local PauseResumeActions_pauseEntry = nil local PauseResumeActions_resumeEntry = nil local function ActionPause(dt) cclog("Pausing") local scheduler = cc.Director:getInstance():getScheduler() scheduler:unscheduleScriptEntry(PauseResumeActions_pauseEntry) local director = cc.Director:getInstance() pausedTargets = director:getActionManager():pauseAllRunningActions() pausedTargets:retain() end local function ActionResume(dt) cclog("Resuming") local scheduler = cc.Director:getInstance():getScheduler() scheduler:unscheduleScriptEntry(PauseResumeActions_resumeEntry) local director = cc.Director:getInstance() if pausedTargets ~= nil then -- problem: will crash here. Try fixing me! director:getActionManager():resumeTargets(pausedTargets) pausedTargets:release() end end local function PauseResumeActions_onEnterOrExit(tag) local scheduler = cc.Director:getInstance():getScheduler() if tag == "enter" then PauseResumeActions_pauseEntry = scheduler:scheduleScriptFunc(ActionPause, 3, false) PauseResumeActions_resumeEntry = scheduler:scheduleScriptFunc(ActionResume, 5, false) elseif tag == "exit" then scheduler:unscheduleScriptEntry(PauseResumeActions_pauseEntry) scheduler:unscheduleScriptEntry(PauseResumeActions_resumeEntry) end end local function PauseResumeActions() local layer = cc.Layer:create() initWithLayer(layer) centerSprites(2) tamara:runAction(cc.RepeatForever:create(cc.RotateBy:create(3, 360))) kathia:runAction(cc.RepeatForever:create(cc.RotateBy:create(3, 360))) layer:registerScriptHandler(PauseResumeActions_onEnterOrExit) Helper.titleLabel:setString("PauseResumeActions") Helper.subtitleLabel:setString("All actions pause at 3s and resume at 5s") return layer end -------------------------------------- -- ActionIssue1305 -------------------------------------- local spriteTmp = nil local Issue1305_entry = nil local Issue1305_layer = nil local function Issue1305_log(sender) cclog("This message SHALL ONLY appear when the sprite is added to the scene, NOT BEFORE") end local function addSprite(dt) local scheduler = cc.Director:getInstance():getScheduler() scheduler:unscheduleScriptEntry(Issue1305_entry) spriteTmp:setPosition(cc.p(250, 250)) Issue1305_layer:addChild(spriteTmp) end local function Issue1305_onEnterOrExit(tag) local scheduler = cc.Director:getInstance():getScheduler() if tag == "enter" then Issue1305_entry = scheduler:scheduleScriptFunc(addSprite, 2, false) elseif tag == "exit" then scheduler:unscheduleScriptEntry(Issue1305_entry) end end local function ActionIssue1305() Issue1305_layer = cc.Layer:create() initWithLayer(Issue1305_layer) centerSprites(0) spriteTmp = cc.Sprite:create("Images/grossini.png") spriteTmp:runAction(cc.CallFunc:create(Issue1305_log)) Issue1305_layer:registerScriptHandler(Issue1305_onEnterOrExit) Helper.titleLabel:setString("Issue 1305") Helper.subtitleLabel:setString("In two seconds you should see a message on the console. NOT BEFORE.") return Issue1305_layer end -------------------------------------- -- ActionIssue1305_2 -------------------------------------- local function Issue1305_2_log1() cclog("1st block") end local function Issue1305_2_log2() cclog("2nd block") end local function Issue1305_2_log3() cclog("3rd block") end local function Issue1305_2_log4() cclog("4th block") end local function ActionIssue1305_2() local layer = cc.Layer:create() initWithLayer(layer) centerSprites(0) local spr = cc.Sprite:create("Images/grossini.png") spr:setPosition(cc.p(200,200)) layer:addChild(spr) local act1 = cc.MoveBy:create(2 ,cc.p(0, 100)) local act2 = cc.CallFunc:create(Issue1305_2_log1) local act3 = cc.MoveBy:create(2, cc.p(0, -100)) local act4 = cc.CallFunc:create(Issue1305_2_log2) local act5 = cc.MoveBy:create(2, cc.p(100, -100)) local act6 = cc.CallFunc:create(Issue1305_2_log3) local act7 = cc.MoveBy:create(2, cc.p(-100, 0)) local act8 = cc.CallFunc:create(Issue1305_2_log4) local actF = cc.Sequence:create(act1, act2, act3, act4, act5, act6, act7, act8) cc.Director:getInstance():getActionManager():addAction(actF ,spr, false) Helper.titleLabel:setString("Issue 1305 #2") Helper.subtitleLabel:setString("See console. You should only see one message for each block") return layer end -------------------------------------- -- ActionIssue1288 -------------------------------------- local function ActionIssue1288() local layer = cc.Layer:create() initWithLayer(layer) centerSprites(0) local spr = cc.Sprite:create("Images/grossini.png") spr:setPosition(cc.p(100, 100)) layer:addChild(spr) local act1 = cc.MoveBy:create(0.5, cc.p(100, 0)) local act2 = act1:reverse() local act3 = cc.Sequence:create(act1, act2) local act4 = cc.Repeat:create(act3, 2) spr:runAction(act4) Helper.titleLabel:setString("Issue 1288") Helper.subtitleLabel:setString("Sprite should end at the position where it started.") return layer end -------------------------------------- -- ActionIssue1288_2 -------------------------------------- local function ActionIssue1288_2() local layer = cc.Layer:create() initWithLayer(layer) centerSprites(0) local spr = cc.Sprite:create("Images/grossini.png") spr:setPosition(cc.p(100, 100)) layer:addChild(spr) local act1 = cc.MoveBy:create(0.5, cc.p(100, 0)) spr:runAction(cc.Repeat:create(act1, 1)) Helper.titleLabel:setString("Issue 1288 #2") Helper.subtitleLabel:setString("Sprite should move 100 pixels, and stay there") return layer end -------------------------------------- -- ActionIssue1327 -------------------------------------- local function logSprRotation(sender) cclog(""..sender:getRotation()) end local function ActionIssue1327() local layer = cc.Layer:create() initWithLayer(layer) centerSprites(0) local spr = cc.Sprite:create("Images/grossini.png") spr:setPosition(cc.p(100, 100)) layer:addChild(spr) local act1 = cc.CallFunc:create(logSprRotation) local act2 = cc.RotateBy:create(0.25, 45) local act3 = cc.CallFunc:create(logSprRotation) local act4 = cc.RotateBy:create(0.25, 45) local act5 = cc.CallFunc:create(logSprRotation) local act6 = cc.RotateBy:create(0.25, 45) local act7 = cc.CallFunc:create(logSprRotation) local act8 = cc.RotateBy:create(0.25, 45) local act9 = cc.CallFunc:create(logSprRotation) spr:runAction(cc.Sequence:create(act1, act2, act3, act4, act5, act6, act7,act8, act9)) Helper.titleLabel:setString("Issue 1327") Helper.subtitleLabel:setString("See console: You should see: 0, 45, 90, 135, 180") return layer end function ActionsTest() cclog("ActionsTest") local scene = cc.Scene:create() Helper.createFunctionTable = { ActionManual, ActionMove, ActionScale, ActionRotate, ActionSkew, ActionRotationalSkewVSStandardSkew, ActionSkewRotate, ActionJump, ActionCardinalSpline, ActionCatmullRom, ActionBezier, ActionBlink, ActionFade, ActionTint, ActionAnimate, ActionSequence, ActionSequence2, ActionSpawn, ActionReverse, ActionDelaytime, ActionRepeat, ActionRepeatForever, ActionRotateToRepeat, ActionRotateJerk, ActionCallFunc, ActionCallFuncND, ActionReverseSequence, ActionReverseSequence2, ActionOrbit, ActionFollow, ActionTargeted, PauseResumeActions, ActionIssue1305, ActionIssue1305_2, ActionIssue1288, ActionIssue1288_2, ActionIssue1327 } scene:addChild(ActionManual()) scene:addChild(CreateBackMenuItem()) return scene end