add ActionTime lua test

This commit is contained in:
dualface 2015-07-29 17:36:54 +08:00
parent d9c5600f41
commit 184225519e
1 changed files with 726 additions and 0 deletions

View File

@ -0,0 +1,726 @@
local itemTagBasic = 1000
local timelineSceneIdx = 1
local winSize = cc.Director:getInstance():getWinSize()
local scheduler = cc.Director:getInstance():getScheduler()
local TimelineTest2Scene = class("TimelineTest2Scene")
TimelineTest2Scene.__index = TimelineTest2Scene
function TimelineTest2Scene.extend(target)
local t = tolua.getpeer(target)
if not t then
t = {}
tolua.setpeer(target, t)
end
setmetatable(t, TimelineTest2Scene)
return target
end
function TimelineTest2Scene:runThisTest()
timelineSceneIdx = 1
self:addChild(restartTimelineTest2())
end
function TimelineTest2Scene.create()
local scene = TimelineTest2Scene.extend(cc.Scene:create())
local bg = cc.Sprite:create("armature/bg.jpg")
bg:setPosition(VisibleRect:center())
local scaleX = VisibleRect:getVisibleRect().width / bg:getContentSize().width
local scaleY = VisibleRect:getVisibleRect().height / bg:getContentSize().height
bg:setScaleX(scaleX)
bg:setScaleY(scaleY)
scene:addChild(bg)
return scene
end
function TimelineTest2Scene.toMainMenuCallback()
end
local TimelineTest2Layer = class("TimelineTest2Layer")
TimelineTest2Layer.__index = TimelineTest2Layer
TimelineTest2Layer._backItem = nil
TimelineTest2Layer._restarItem = nil
TimelineTest2Layer._nextItem = nil
function TimelineTest2Layer:onEnter()
end
local _titles = {
"debug",
"change animation",
"AnimationList: walk",
"AnimationList: stand",
}
function TimelineTest2Layer.title(idx)
return _titles[idx] or "";
end
function TimelineTest2Layer.subTitle(idx)
return ""
end
function TimelineTest2Layer.create()
local layer = TimelineTest2Layer.extend(cc.Layer:create())
if nil ~= layer then
layer:createMenu()
layer:createToExtensionMenu()
layer:creatTitleAndSubTitle(timelineSceneIdx)
local function onNodeEvent(event)
if "enter" == event then
layer:onEnter()
end
end
layer:registerScriptHandler(onNodeEvent)
end
return layer
end
function TimelineTest2Layer.backCallback()
local newScene = TimelineTest2Scene.create()
newScene:addChild(backTimelineTest2())
cc.Director:getInstance():replaceScene(newScene)
end
function TimelineTest2Layer.restartCallback()
local newScene = TimelineTest2Scene.create()
newScene:addChild(restartTimelineTest2())
cc.Director:getInstance():replaceScene(newScene)
end
function TimelineTest2Layer.nextCallback()
local newScene = TimelineTest2Scene.create()
newScene:addChild(nextTimelineTest2())
cc.Director:getInstance():replaceScene(newScene)
end
function TimelineTest2Layer:createMenu()
local menu = cc.Menu:create()
self._backItem = cc.MenuItemImage:create(s_pPathB1, s_pPathB2)
self._backItem:registerScriptTapHandler(self.backCallback)
menu:addChild(self._backItem,itemTagBasic)
self._restarItem = cc.MenuItemImage:create(s_pPathR1, s_pPathR2)
self._restarItem:registerScriptTapHandler(self.restartCallback)
menu:addChild(self._restarItem,itemTagBasic)
self._nextItem = cc.MenuItemImage:create(s_pPathF1, s_pPathF2)
menu:addChild(self._nextItem,itemTagBasic)
self._nextItem:registerScriptTapHandler(self.nextCallback)
local size = cc.Director:getInstance():getWinSize()
self._backItem:setPosition(cc.p(size.width / 2 - self._restarItem:getContentSize().width * 2, self._restarItem:getContentSize().height / 2))
self._restarItem:setPosition(cc.p(size.width / 2, self._restarItem:getContentSize().height / 2))
self._nextItem:setPosition(cc.p(size.width / 2 + self._restarItem:getContentSize().width * 2, self._restarItem:getContentSize().height / 2))
menu:setPosition(cc.p(0, 0))
self:addChild(menu)
end
function TimelineTest2Layer.toExtensionMenu()
ccs.ArmatureDataManager:destroyInstance()
local scene = CocoStudioTestMain()
if scene ~= nil then
cc.Director:getInstance():replaceScene(scene)
end
end
function TimelineTest2Layer:createToExtensionMenu()
cc.MenuItemFont:setFontName("Arial")
cc.MenuItemFont:setFontSize(24)
local menuItemFont = cc.MenuItemFont:create("Back")
menuItemFont:setPosition(cc.p(VisibleRect:rightBottom().x - 50, VisibleRect:rightBottom().y + 25))
menuItemFont:registerScriptTapHandler(TimelineTest2Layer.toExtensionMenu)
local backMenu = cc.Menu:create()
backMenu:addChild(menuItemFont)
backMenu:setPosition(cc.p(0, 0))
self:addChild(backMenu,10)
end
function TimelineTest2Layer:creatTitleAndSubTitle(idx)
print("set title")
local title = cc.Label:createWithTTF(TimelineTest2Layer.title(idx), "fonts/Thonburi.ttf", 18)
title:setColor(cc.c3b(255,0,0))
self:addChild(title, 1, 10000)
title:setPosition( cc.p(VisibleRect:center().x, VisibleRect:top().y - 30))
local subTitle = nil
if "" ~= TimelineTest2Layer.subTitle(idx) then
local subTitle = cc.Label:createWithTTF(TimelineTest2Layer.subTitle(idx), "fonts/Thonburi.ttf", 18)
subTitle:setColor(cc.c3b(0,0,0))
self:addChild(subTitle, 1, 10001)
subTitle:setPosition( cc.p(VisibleRect:center().x, VisibleRect:top().y - 60) )
end
end
local TestActionTimeline = class("TestActionTimeline",TimelineTest2Layer)
TestActionTimeline.__index = TestActionTimeline
function TestActionTimeline.extend(target)
local t = tolua.getpeer(target)
if not t then
t = {}
tolua.setpeer(target, t)
end
setmetatable(t, TestActionTimeline)
return target
end
function TestActionTimeline:onEnter()
local node = cc.CSLoader:createNode("ActionTimeline/DemoPlayer_skeleton.csb")
local action = cc.CSLoader:createTimeline("ActionTimeline/DemoPlayer_skeleton.csb")
node:runAction(action)
action:gotoFrameAndPlay(0)
node:setScale(0.2)
node:setPosition(VisibleRect:center())
self:addChild(node)
end
function TestActionTimeline.restartCallback()
ccs.ArmatureDataManager:destroyInstance()
local newScene = TimelineTest2Scene.create()
newScene:addChild(restartTimelineTest2())
cc.Director:getInstance():replaceScene(newScene)
end
function TestActionTimeline.create()
local layer = TestActionTimeline.extend(cc.Layer:create())
if nil ~= layer then
layer:createMenu()
layer:createToExtensionMenu()
layer:creatTitleAndSubTitle(timelineSceneIdx)
local function onNodeEvent(event)
if "enter" == event then
layer:onEnter()
end
end
layer:registerScriptHandler(onNodeEvent)
end
return layer
end
local TestChangePlaySection = class("TestChangePlaySection",TimelineTest2Layer)
TestChangePlaySection.__index = TestChangePlaySection
function TestChangePlaySection.extend(target)
local t = tolua.getpeer(target)
if not t then
t = {}
tolua.setpeer(target, t)
end
setmetatable(t, TestChangePlaySection)
return target
end
function TestChangePlaySection:onEnter()
local node = cc.CSLoader:createNode("ActionTimeline/DemoPlayer_skeleton.csb")
local action = cc.CSLoader:createTimeline("ActionTimeline/DemoPlayer_skeleton.csb")
node:runAction(action)
action:gotoFrameAndPlay(41)
node:setScale(0.2)
node:setPosition(VisibleRect:center())
action:addAnimationInfo(ccs.AnimationInfo("stand", 0 , 40))
action:addAnimationInfo(ccs.AnimationInfo("walk", 41 , 81))
action:addAnimationInfo(ccs.AnimationInfo("killall", 174, 249))
assert(action:IsAnimationInfoExists("stand") == true, "stand animation didn't exist")
action:play("stand", true)
assert(action:getAnimationInfo("stand").endIndex == 40, "endIndex of animationInfo is not 40")
action:removeAnimationInfo("stand")
assert(action:IsAnimationInfoExists("stand") == false, "stand animation has already existed")
local function onTouchesEnded(touches, event)
if action:getStartFrame() == 0 then
action:gotoFrameAndPlay(41, 81, true)
else
action:gotoFrameAndPlay(0, 40, true)
end
end
local listener = cc.EventListenerTouchAllAtOnce:create()
listener:registerScriptHandler(onTouchesEnded,cc.Handler.EVENT_TOUCHES_ENDED )
local eventDispatcher = self:getEventDispatcher()
eventDispatcher:addEventListenerWithSceneGraphPriority(listener, self)
self:addChild(node)
end
function TestChangePlaySection.restartCallback()
ccs.ArmatureDataManager:destroyInstance()
local newScene = TimelineTest2Scene.create()
newScene:addChild(restartTimelineTest2())
cc.Director:getInstance():replaceScene(newScene)
end
function TestChangePlaySection.create()
local layer = TestChangePlaySection.extend(cc.Layer:create())
if nil ~= layer then
layer:createMenu()
layer:createToExtensionMenu()
layer:creatTitleAndSubTitle(timelineSceneIdx)
local function onNodeEvent(event)
if "enter" == event then
layer:onEnter()
end
end
layer:registerScriptHandler(onNodeEvent)
end
return layer
end
local TestTimelineFrameEvent = class("TestTimelineFrameEvent",TimelineTest2Layer)
TestTimelineFrameEvent.__index = TestTimelineFrameEvent
function TestTimelineFrameEvent.extend(target)
local t = tolua.getpeer(target)
if not t then
t = {}
tolua.setpeer(target, t)
end
setmetatable(t, TestTimelineFrameEvent)
return target
end
function TestTimelineFrameEvent:onEnter()
local node = cc.CSLoader:createNode("ActionTimeline/DemoPlayer_skeleton.csb")
local action = cc.CSLoader:createTimeline("ActionTimeline/DemoPlayer_skeleton.csb")
node:runAction(action)
action:gotoFrameAndPlay(0)
node:setScale(0.2)
node:setPosition(VisibleRect:center())
self:addChild(node)
local function onFrameEvent(frame)
if nil == frame then
return
end
local str = frame:getEvent()
if str == "changeColor" then
frame:getNode():setColor(cc.c3b(0, 0, 0))
elseif(str == "endChangeColor") then
frame:getNode():setColor(cc.c3b(255,255,255))
end
end
action:setFrameEventCallFunc(onFrameEvent)
end
function TestTimelineFrameEvent.restartCallback()
ccs.ArmatureDataManager:destroyInstance()
local newScene = TimelineTest2Scene.create()
newScene:addChild(restartTimelineTest2())
cc.Director:getInstance():replaceScene(newScene)
end
function TestTimelineFrameEvent.create()
local layer = TestTimelineFrameEvent.extend(cc.Layer:create())
if nil ~= layer then
layer:createMenu()
layer:createToExtensionMenu()
layer:creatTitleAndSubTitle(timelineSceneIdx)
local function onNodeEvent(event)
if "enter" == event then
layer:onEnter()
end
end
layer:registerScriptHandler(onNodeEvent)
end
return layer
end
local TestTimelinePerformance = class("TestTimelinePerformance",TimelineTest2Layer)
TestTimelinePerformance.__index = TestTimelinePerformance
function TestTimelinePerformance.extend(target)
local t = tolua.getpeer(target)
if not t then
t = {}
tolua.setpeer(target, t)
end
setmetatable(t, TestTimelinePerformance)
return target
end
function TestTimelinePerformance:onEnter()
for i = 1,100 do
local node = cc.CSLoader:createNode("ActionTimeline/DemoPlayer_skeleton.csb")
local action = cc.CSLoader:createTimeline("ActionTimeline/DemoPlayer_skeleton.csb")
node:runAction(action)
action:gotoFrameAndPlay(41)
node:setScale(0.1)
node:setPosition((i - 1) * 2, 100)
self:addChild(node)
end
end
function TestTimelinePerformance.restartCallback()
ccs.ArmatureDataManager:destroyInstance()
local newScene = TimelineTest2Scene.create()
newScene:addChild(restartTimelineTest2())
cc.Director:getInstance():replaceScene(newScene)
end
function TestTimelinePerformance.create()
local layer = TestTimelinePerformance.extend(cc.Layer:create())
if nil ~= layer then
layer:createMenu()
layer:createToExtensionMenu()
layer:creatTitleAndSubTitle(timelineSceneIdx)
local function onNodeEvent(event)
if "enter" == event then
layer:onEnter()
end
end
layer:registerScriptHandler(onNodeEvent)
end
return layer
end
-------------------------------------------
---TestTimelineAnimationList
-------------------------------------------
local TestTimelineAnimationList = class("TestTimelineAnimationList",TimelineTest2Layer)
TestTimelineAnimationList.__index = TestTimelineAnimationList
function TestTimelineAnimationList.extend(target)
local t = tolua.getpeer(target)
if not t then
t = {}
tolua.setpeer(target, t)
end
setmetatable(t, TestTimelineAnimationList)
return target
end
function TestTimelineAnimationList:onEnter()
local node = cc.CSLoader:createNode("ActionTimeline/DemoPlayer_skeleton.csb")
local action = cc.CSLoader:createTimeline("ActionTimeline/DemoPlayer_skeleton.csb")
local standInfo = ccs.AnimationInfo("stand", 0, 40)
local walkInfo = ccs.AnimationInfo("walk", 41, 81)
action:addAnimationInfo(standInfo)
action:addAnimationInfo(walkInfo)
node:runAction(action)
action:play("walk", true)
node:setScale(0.2)
node:setPosition(150,100)
self:addChild(node)
end
function TestTimelineAnimationList.restartCallback()
ccs.ArmatureDataManager:destroyInstance()
local newScene = TimelineTest2Scene.create()
newScene:addChild(restartTimelineTest2())
cc.Director:getInstance():replaceScene(newScene)
end
function TestTimelineAnimationList.create()
local layer = TestTimelineAnimationList.extend(cc.Layer:create())
if nil ~= layer then
layer:createMenu()
layer:createToExtensionMenu()
layer:creatTitleAndSubTitle(timelineSceneIdx)
local function onNodeEvent(event)
if "enter" == event then
layer:onEnter()
end
end
layer:registerScriptHandler(onNodeEvent)
end
return layer
end
-------------------------------------------
---TestTimelineProjectNode
-------------------------------------------
local TestTimelineProjectNode = class("TestTimelineProjectNode",TimelineTest2Layer)
TestTimelineProjectNode.__index = TestTimelineProjectNode
function TestTimelineProjectNode.extend(target)
local t = tolua.getpeer(target)
if not t then
t = {}
tolua.setpeer(target, t)
end
setmetatable(t, TestTimelineProjectNode)
return target
end
function TestTimelineProjectNode:onEnter()
local node = cc.CSLoader:createNode("ActionTimeline/TestAnimation.csb")
local action = cc.CSLoader:createTimeline("ActionTimeline/TestAnimation.csb")
node:runAction(action)
action:gotoFrameAndPlay(0, true)
node:setPosition(-300, -300)
self:addChild(node)
end
function TestTimelineProjectNode.restartCallback()
ccs.ArmatureDataManager:destroyInstance()
local newScene = TimelineTest2Scene.create()
newScene:addChild(restartTimelineTest2())
cc.Director:getInstance():replaceScene(newScene)
end
function TestTimelineProjectNode.create()
local layer = TestTimelineProjectNode.extend(cc.Layer:create())
if nil ~= layer then
layer:createMenu()
layer:createToExtensionMenu()
layer:creatTitleAndSubTitle(timelineSceneIdx)
local function onNodeEvent(event)
if "enter" == event then
layer:onEnter()
end
end
layer:registerScriptHandler(onNodeEvent)
end
return layer
end
-------------------------------------------
---TestProjectNodeForSimulator
-------------------------------------------
local TestProjectNodeForSimulator = class("TestProjectNodeForSimulator",TimelineTest2Layer)
TestProjectNodeForSimulator.__index = TestProjectNodeForSimulator
function TestProjectNodeForSimulator.extend(target)
local t = tolua.getpeer(target)
if not t then
t = {}
tolua.setpeer(target, t)
end
setmetatable(t, TestProjectNodeForSimulator)
return target
end
function TestProjectNodeForSimulator:onEnter()
local node = cc.CSLoader:getInstance():createNodeWithFlatBuffersForSimulator("ActionTimeline/TestAnimation.csd")
local action = ccs.ActionTimelineCache:getInstance():createActionWithFlatBuffersForSimulator("ActionTimeline/TestAnimation.csd")
node:runAction(action)
action:gotoFrameAndPlay(0, true)
node:setPosition(-300, -300)
self:addChild(node)
--test for when ProjectNode file lost
local lackProjectNodefileNode = cc.CSLoader:getInstance():createNodeWithFlatBuffersForSimulator("ActionTimeline/TestNullProjectNode.csd")
local lackProjectNodefileAction = ccs.ActionTimelineCache:getInstance():createActionWithFlatBuffersForSimulator("ActionTimeline/TestNullProjectNode.csd")
lackProjectNodefileNode:runAction(lackProjectNodefileAction)
lackProjectNodefileAction:gotoFrameAndPlay(0)
self:addChild(lackProjectNodefileNode)
end
function TestProjectNodeForSimulator.restartCallback()
ccs.ArmatureDataManager:destroyInstance()
local newScene = TimelineTest2Scene.create()
newScene:addChild(restartTimelineTest2())
cc.Director:getInstance():replaceScene(newScene)
end
function TestProjectNodeForSimulator.create()
local layer = TestProjectNodeForSimulator.extend(cc.Layer:create())
if nil ~= layer then
layer:createMenu()
layer:createToExtensionMenu()
layer:creatTitleAndSubTitle(timelineSceneIdx)
local function onNodeEvent(event)
if "enter" == event then
layer:onEnter()
end
end
layer:registerScriptHandler(onNodeEvent)
end
return layer
end
-------------------------------------------
---TestTimelineNodeLoadedCallback
-------------------------------------------
local TestTimelineNodeLoadedCallback = class("TestTimelineNodeLoadedCallback",TimelineTest2Layer)
TestTimelineNodeLoadedCallback.__index = TestTimelineNodeLoadedCallback
function TestTimelineNodeLoadedCallback.extend(target)
local t = tolua.getpeer(target)
if not t then
t = {}
tolua.setpeer(target, t)
end
setmetatable(t, TestTimelineNodeLoadedCallback)
return target
end
function TestTimelineNodeLoadedCallback:onEnter()
local node = cc.CSLoader:createNode("ActionTimeline/DemoPlayer_skeleton.csb", function(object)
if nil ~= object then
print("object type is ", tolua.type(object))
print("node name = ",object:getName())
print("node parent name = ", object:getParent():getName())
end
end)
local action = cc.CSLoader:createTimeline("ActionTimeline/DemoPlayer_skeleton.csb")
node:runAction(action)
action:gotoFrameAndPlay(0)
node:setScale(0.2)
node:setPosition(VisibleRect:center())
self:addChild(node)
end
function TestTimelineNodeLoadedCallback.restartCallback()
ccs.ArmatureDataManager:destroyInstance()
local newScene = TimelineTest2Scene.create()
newScene:addChild(restartTimelineTest2())
cc.Director:getInstance():replaceScene(newScene)
end
function TestTimelineNodeLoadedCallback.create()
local layer = TestTimelineNodeLoadedCallback.extend(cc.Layer:create())
if nil ~= layer then
layer:createMenu()
layer:createToExtensionMenu()
layer:creatTitleAndSubTitle(timelineSceneIdx)
local function onNodeEvent(event)
if "enter" == event then
layer:onEnter()
end
end
layer:registerScriptHandler(onNodeEvent)
end
return layer
end
-------------------------------------------
---TestActionTimelineEase
-------------------------------------------
local TestActionTimelineEase = class("TestActionTimelineEase",TimelineTest2Layer)
TestActionTimelineEase.__index = TestActionTimelineEase
function TestActionTimelineEase.extend(target)
local t = tolua.getpeer(target)
if not t then
t = {}
tolua.setpeer(target, t)
end
setmetatable(t, TestActionTimelineEase)
return target
end
function TestActionTimelineEase:onEnter()
local node = cc.CSLoader:createNode("ActionTimeline/ActionTimelineEase.csb")
local action = cc.CSLoader:createTimeline("ActionTimeline/ActionTimelineEase.csb")
node:runAction(action)
action:gotoFrameAndPlay(0)
self:addChild(node)
end
function TestActionTimelineEase.restartCallback()
ccs.ArmatureDataManager:destroyInstance()
local newScene = TimelineTest2Scene.create()
newScene:addChild(restartTimelineTest2())
cc.Director:getInstance():replaceScene(newScene)
end
function TestActionTimelineEase.create()
local layer = TestActionTimelineEase.extend(cc.Layer:create())
if nil ~= layer then
layer:createMenu()
layer:createToExtensionMenu()
layer:creatTitleAndSubTitle(timelineSceneIdx)
local function onNodeEvent(event)
if "enter" == event then
layer:onEnter()
end
end
layer:registerScriptHandler(onNodeEvent)
end
return layer
end
local actionlineSceneArr =
{
TestActionTimeline.create,
TestChangePlaySection.create,
TestTimelineFrameEvent.create,
TestTimelinePerformance.create,
TestTimelineAnimationList.create,
TestTimelineProjectNode.create,
TestProjectNodeForSimulator.create,
TestTimelineNodeLoadedCallback.create,
TestActionTimelineEase.create,
}
function nextTimelineTest2()
timelineSceneIdx = timelineSceneIdx + 1
timelineSceneIdx = timelineSceneIdx % table.getn(actionlineSceneArr)
if 0 == timelineSceneIdx then
timelineSceneIdx = table.getn(actionlineSceneArr)
end
return actionlineSceneArr[timelineSceneIdx]()
end
function backTimelineTest2()
timelineSceneIdx = timelineSceneIdx - 1
if timelineSceneIdx <= 0 then
timelineSceneIdx = timelineSceneIdx + table.getn(actionlineSceneArr)
end
return actionlineSceneArr[timelineSceneIdx]()
end
function restartTimelineTest2()
return actionlineSceneArr[timelineSceneIdx]()
end
function runCocoStudioActionTimelineTest2Scene()
local scene = TimelineTest2Scene.create()
scene:runThisTest()
cc.Director:getInstance():replaceScene(scene)
end