cc.tween的parallel方法上有点疑问请教

<!-- cc.tween的parallel方法解释的是并行执行两个cc.tween let jump = cc.tween() .by(0.2, { position: cc.v2(0, 30) }) //其中一个tween如果有连续2个动作就会出现问题 .by(0.2, { position: cc.v2(0, -30) }) // let move = cc.tween() .to(0.4, { position: cc.v2(pos.x, pos.y + 60) }) cc.tween(PlayerNode) .parallel(move, jump) //只会执行后面一个动作 比如 jump ,如果2个动作都只有一个tween就一切正常 .start() 请问是我写法有问题,还是这个parallel只是针对两个单个的动作而不是动作集合起作用

没人能解惑下吗

多个连续的缓动 用 sequence 包起来

sequence 好像是增加一组队列没起作用
而且我试了下
cc.Class({
extends: cc.Component,

properties: {
    testNode: cc.Node,
},



onLoad() {

    let scale = cc.tween()
        .to(0.5, { scale: 2 })
        .to(0.5, { scale: 1 })

    let move = cc.tween()
        .to(0.5, { position: cc.v2(100, 100) })
        .to(0.5, { position: cc.v2(100, 200) })

    cc.tween(this.testNode)

        .parallel(scale, move)

        .start()

    //     let jump = cc.tween()
    //     .by(0.2, { position: cc.v2(0, 30) })
    //     .by(0.2, { position: cc.v2(0, -30) })

    // let move = cc.tween()
    //     .to(0.4, { position: cc.v2(100, 100) })

    // cc.tween(this.testNode)
    //     .parallel(move, jump)
    //     .start()

},

});

上面scale和move的两组动作可以组合毫无问题,但是就是下面两组只会显示 .parallel(move, jump)中的后面一组动作也就是jump,反过来写 .parallel(jump, move)就只显示move动作,邪了门了

两个动作都是修改position,所以冲突了吧

用老版的方法
let spawn = cc.spawn(jump, move);
this.testNode.runAction(spawn);
完全能行 所以应该不是动作冲突,但是有个
cc.Action is deprecated now, please use cc.TweenAction instead
的警告,我总觉得别扭,而且老方法确实写法不顺眼

毕竟tween和action实现的原理上都不一样

有没有懂源码的人能解释是为什么呢

我自己琢磨了下tween的源码,虽然不太明白,但是感觉应该就只是在action的基础上做了个包装,好像是老酒换新瓶
压根没重新做方法代码,项目构建的模块加载里面勾选的也只有action模块,不存在什么tween的模块,cc.tween这个模块应该只是在cc.action模块这个基础上的副产品

两个并行tween都改position,你的预期效果是什么?
楼上说的position冲突是很有道理的。

想达到的效果是从一个点跳到另一个点,by的y轴上下移动起到跳跃动画作用,
我用runAction可以实现,但是tween却不行,我发的代码有说明
你可以看到, 我的y轴跳跃是个2段的(连续)组合动作,用tween.parallel把跳跃和移动组合成(并行)动作的时候,
就发生2段的(连续)组合动作只有后面的一个生效的情况

所以我觉得tween.parallel是不是有点问题,要找人指点一下

上下移动时position改成y就好了,不要去控制x。
同理水平移动只控制x

你的第2个action里同时改了x, y,所以我推测你在做2.5视角的功能,自己模拟Z轴。
这种情况最好把Z上下移动和XY平面移动拆分到两个父子关系节点里,各自做action。

用runAction可以轻松实现两组动作同步并行,这个tween却无法对同一属性双重操作,这也太费劲了吧
我刚刚尝试by动作只对y轴操作 ,但是会导致to这个动作里的y轴属性无变化。。。。同一时间无法对同一属性双重操作
真是有点绕的慌

好吧,我把模拟跳跃放到z轴上操作

假如是我要实现魂斗罗里面的F子弹,这用tween来做估计也是费脑子,用runAction来组合轻松多了
只是打个比方,肯定是用cc.Animation来实现

tween的实现不一样,如果是by方法,会根据参数计算结束值。


action的xxby系列方法,是记录delta值。
但是tween能支持自定义属性,很灵活。

F子弹同理水平移动和子弹旋转分开来。

我没有系统的学过JAVA,cocos也是才摸了几个月,源码看的太费劲了
不怕笑话,几个月前还在为let,var,this纠结,到现在还是没明白var用在哪里好,我整篇代码都没用过var
但是看别人的都是在用var

我这用的纯2d的思路,压根没用过2.5d啊。。。
我还是用runAction凑合着用吧