在3.3final中,为什么在一帧中多个runAction和stopAction,会顿卡

在模拟器中,运行时间从0.001以下变成0.03了。
在真机中,更明显了,3-4秒的卡顿,连续几个会达到8秒。
附上我的丑陋的代码,不要见怪。

local scene = cc.Scene:create();
local node = cc.CSLoader:createNode(“armature.csb”);
local action = cc.CSLoader:createTimeline(“armature.csb”);

action:retain();

node:setPosition(500,500);
scene:addChild(node);

local node1 = cc.CSLoader:createNode("armature.csb");

node1:setPosition(500,300);
scene:addChild(node1);

local node2 = cc.CSLoader:createNode("armature.csb");

node2:setPosition(500,100);
scene:addChild(node2);

local act = action:clone();
local act1 = action:clone();
local act2 = action:clone();
act:gotoFrameAndPlay(0,false);
act1:gotoFrameAndPlay(0,false);
act2:gotoFrameAndPlay(0,false);

node:runAction(act);
node1:runAction(act1);
node2:runAction(act2);

cc.Director:getInstance():getScheduler():scheduleScriptFunc(function(dt)
    print("---");
    local t1 = os.clock();
    node:stopAction(act);
    print(os.clock() - t1);
    
    act = action:clone();
    act:gotoFrameAndPlay(0,false);
    node:runAction(act);
    
    local t1 = os.clock();
    node1:stopAction(act1);
    print(os.clock() - t1);
    
    act1 = action:clone();
    act1:gotoFrameAndPlay(0,false);
    node1:runAction(act1);
    
    local t1 = os.clock();
    node2:stopAction(act2);
    print(os.clock() - t1);
    act2 = action:clone();
    act2:gotoFrameAndPlay(0,false);
    node2:runAction(act2);
end,3,false);

输出是

0.00099999999999945
0.047
0.039000000000001

0.0019999999999998
0.047
0.045

麻烦给出csb文件,我测试一下。(附件传上来即可)

你用那个flash转cocostudio那个例子就可以了。
http://www.cocoachina.com/bbs/read.php?tid-236927-keyword-flash.html

而且我发现,用ccmoveby这种基本action貌似没这个问题,可能是因为动作比较简单的原因吧?
暂时只发现actiontimeline问题比较明显。

我现在使用的cocostudio是2.05和2.06,这两个版本。

@东扬,有什么差异么?

为什么被移了一下板块,那些代码就出现了那么多html标签?

可能是那个动画帧太多了
flash转过来的动画每帧都会生成所有属性的帧,没有经过优化处理

那个flash转cocostudio插件的例子都这样了,真不知道要怎样优化处理?
以前cocos2dx3.2+cocostudio1.6用dragon bone把flash转cocostudio然后用armature真机跑60fps没压力,但自从升到cocos2dx3.3也是不行了,各种掉帧。
现在cocos2dx3.3final+cocostudio2.05,跑起来60fps没问题,但就是切换动作的时候,stopAction+runAction就顿卡了。加载csb的时候貌似也是有些卡的。

有没有试过用act->pause

可以了,感谢东扬兄,对于action,我一直理解错误,以为一定要stopAction才算是暂停。
第一次才需要runAction,以后切换动作直接gotoFrameAndPlay就可以了。

mark!!!