tween跟旧action的使用疑惑(有简单代码)

我需要在update去更新node的x值, 同时还会起一个动作去让该node的x值左右晃动
具体代码如下:

export default class NewClass extends cc.Component {


    start() {

        //使用旧版本的动作没有这个问题
        // this.runOldAction()

        //新版本动作会有这个问题
        this.runTweenAction()
    }

    runTweenAction() {
        let action = cc.tween().by(0.1, {x: 5}).by(0.1, {x: -5})
        cc.tween(this.node).repeatForever(action).start()


    }

    runOldAction() {

        this.node.runAction(cc.sequence(
            cc.moveBy(0.1, 5, 0),
            cc.moveBy(0.1, -5, 0),
        ).repeatForever())
    }

    update(dt: number) {
        this.node.x -= dt * 500
        console.log(this.node.x)
    }
}

现在有执行 左右移动的循环动作时, update里对x的修改就会失效, 或者说又马上会被动作给覆盖了。

我的需求是要能在update里精确控制位移,用action去做update里的工作, 后续会非常麻烦, 这边只是举个简单的例子。

目前有使用tween动作去修改x的值 时, update里的操作就不能按预期的那个工作

使用旧版本的action则正常,
这是BUG吗?

一个让你向左,一个让你向右,是你你会往哪走,如果怕卡顿位移量不对就只用update写就好了

旧版本的动作没有这个问题。

runTweenAction 中第一个action绑定this.node试试呢?

用旧版本的action, 引擎又会报警告。。
@jare

给当前节点加一个子节点,把当前节点的sprite组件给子节点,子节点负责左右晃动,父节点向左移动

可以随便绕,总能实现。但是我个人不建议用缓动或者 tween 实现这么特殊的操作,建议在 update 里自己计算位移

已经在update里面有固定的每帧位移了, 但是有时候做一些效果, 还需要一些动作, 一些缓动的,

如果不 能复用tween的能力, 就等于还要自己在update里面实现一次, 感觉这样做, 不太科学, 引擎一定有更好的解决方案

是啊,所以是我个人的偏好。你希望引擎有更好的解决方案?那可以参考楼上小伙伴的建议,拆分父子节点之类的

旧的action没这问题啊, cc.tween内部的实现代码是把值直接覆盖?而不是像旧的action算出偏移量再+=上去? 是不是可以调整成跟旧的action 一样?

这个可以自己写progress来处理

动画应该放在子节点上,移动放在父节点上

1赞