cocos2d-x-3.2 lua-tests中自带示例求解

早上在看自带的例子lua-tests,看到ActionsProgressTest.lua时发现一个代码的执行效果与代码不符,特来求解,贴出代码如下:

local function SpriteProgressToRadial()
    local layer = cc.Layer:create()
    Helper.initWithLayer(layer)

    local to1 = cc.ProgressTo:create(2, 100)
    local to2 = cc.ProgressTo:create(2, 100)

    local left = cc.ProgressTimer:create(cc.Sprite:create(s_pPathSister1))
    left:setType(cc.PROGRESS_TIMER_TYPE_RADIAL)
    left:setPosition(cc.p(100, s.height / 2))
    left:runAction(cc.RepeatForever:create(to1))
    layer:addChild(left)

    local right = cc.ProgressTimer:create(cc.Sprite:create(s_pPathBlock))
    right:setType(cc.PROGRESS_TIMER_TYPE_RADIAL)
    -- Makes the ridial CCW
    right:setReverseDirection(true)
    right:setPosition(cc.p(s.width - 100, s.height / 2))
    right:runAction(cc.RepeatForever:create(to2))
    layer:addChild(right)

    Helper.subtitleLabel:setString("ProgressTo Radial")
    return layer
end


```

并附上截图:
 

另外对比了下cpp-tests中的代码,实际运行效果与代码完全一致,不过,cpp版本创建的是Sequence,而不仅仅是ProgressTo,请看:
auto to1 = Sequence::createWithTwoActions(ProgressTo::create(2, 100), ProgressTo::create(0, 0));
auto to2 = Sequence::createWithTwoActions(ProgressTo::create(2, 100), ProgressTo::create(0, 0));

lua 代码这样做repeat是有问题的,楼上的C++代码是正确的。ProgressTo::create(2, 100) 这个执行完后当前的percent 就是100 如果不执行ProgressTo::create(0, 0) 这个方法那就后面都一直是100, 执行了ProgressTo::create(0, 0)方法后就把percent设置成0,这样依次循环就有正确的效果。

谢谢解答,我早上尝试将lua中的to1改成下面这样,出现语法错误:
local to1 = cc.Sequence:createWithTwoActions(cc.ProgressTo:create(2, 100), cc.ProgressTo:create(0, 0));
提示createWithTwoActions是nil,我该如何找这个与c++中对应的方法呢?最好能找到cc的源文件定义!:6:

早上忙,没时间仔细看,是不是2秒从0到100,然后以后每次执行的时候都是100到100,所以看不出来?

是的, 就是这个意思。

请问,lua中有对应c++中Sequence::createWithTwoActions接口的写法吗?怎样写才能实现不停重复运动呢?

通过cocos code ide的智能提示功能,我已经找到了正确的写法,修改如下:
– local to1 = cc.ProgressTo:create(2, 100)
– local to2 = cc.ProgressTo:create(2, 100)
local to1 = cc.Sequence:create(cc.ProgressTo:create(2, 100), cc.ProgressTo:create(0, 0))
local to2 = cc.Sequence:create(cc.ProgressTo:create(2, 100), cc.ProgressTo:create(0, 0))

如今没有智能提示,学新东西还真是累啊!:14:

恩 熟悉api接口就好了。

:2:谢谢关注