已经运行中的action加快节奏

已经在节点run了一个action了。
运行过程中发现要提早结束,所以需要加快整个action的速度。
问。
怎么动态修改一个已经run的action的速度?

停掉它,再执行一个速度较快的

我目前是stopAllActions
然后再重新runaction结束的动作 外部加了个 cc.speed .没效果。。。。

我通常是直接修改时间参数,cc.speed没用过

代码贴一下, cc.speed 应该是可以实现你想要的效果的

    var speed = cc.speed(cc.moveTo(10, cc.p(900, 900)), 1);
    this.label.node.runAction(speed);
    //speed._speed = 3;
    speed.setSpeed(3);

经过测试, 上面这段代码效果正常 ,不过我不清楚这样直接访问下划线开头的变量是否合理.

2赞

直接访问私有变量不是好习惯 虽然js很灵活 但这样缺少可控性
我觉得最好是new Scheduler与 ActionManager 然手设置timeScale
再调用node的setActionManager setScheduler

谢谢指出错误, 但是感觉你这样做还是过于复杂了, cc.Speed 应该暴露出修改 _speed 的接口, 在 [CCAction 源码] (https://github.com/cocos-creator/engine/blob/52b1a7658c9ff0b86baa77c00050474db931fdc4/cocos2d/actions/CCAction.js#L290) 中看确实是有的.

只是不知道为什么没有提示出来, 我当时 cc.log 这个对象也没有看到这个函数. 但是我修改代码为:

speed.setSpeed(3);

也是可以运行的 :joy:.

恩 如果有接口这样设置当然是最好的.
我很久以前做的了, 当时先考虑speed 后来没办法只好用笨办法 哈哈

mark

自己管理动作,创建一个cc.ActionManager,将需要的加速的动作添加到里面,然后在组件update周期函数去更新,dt * 你的速度变量.