没人能解惑下吗
多个连续的缓动 用 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来实现
我没有系统的学过JAVA,cocos也是才摸了几个月,源码看的太费劲了
不怕笑话,几个月前还在为let,var,this纠结,到现在还是没明白var用在哪里好,我整篇代码都没用过var
但是看别人的都是在用var
我这用的纯2d的思路,压根没用过2.5d啊。。。
我还是用runAction凑合着用吧

