3.0的tween有严重缺陷啊,设置坐标必须用Vec3设置全部,没法分别设x和y做抛物线啊

我需要把x设为正常曲线,而y设为quadOut曲线,这样就能实现抛物线了,但是3.0只能设置postion的Vec3(),没法分别设x和y做抛物线啊

为了降低更新 Node Transform 信息的频率, Node 内部维护了一个 dirty 状态,只有在调用了可能会改变 Node Transform 信息的接口,才会将 dirty 置为需要更新的状态。

但目前的接口存在一定的限制,例如:通过 this.node.position 获取到的 position 是一个通用的 Vec3

当执行 this.node.position.x = 1 这段代码的时候,只执行了 positiongetter ,并没有执行 positionsetter 。由于 dirty 并没有更新,便会导致渲染时使用的节点的 Transform 信息没有更新。

目前,我们也不支持这样的调用,而是鼓励使用 setPositionpositionsetter ,如下所示:

let _pos = new Vec3(0, 1, 0);
this.node.position = _pos;      // 这里将通过 position 的 setter
this.node.setPosition(_pos);    // 这里将通过接口 setPosition

https://docs.cocos.com/creator/manual/zh/tween/tween-interface.html?h=tween

没用啊,我试过了,tween里不能单独设置node.position.x

官方说不能,可以用action

什么action? 请问使用node.position.x = 设置坐标后,怎么让坐标更新?怎么更新 dirty状态?

看了下官方文档的 缓动示例 部分,有一个想法。

文档说缓动可以绑定 任意 对象,那么是否可类似示例中对颜色变化的缓动,自定义一个只有 y 属性的 class,对其实例进行缓动操作,然后在 onUpdate 里拿到缓动的进度,设置给节点的 positiony

不过我没有试过,是刚翻文档产生的想法,楼主可以尝试下。

3.x 面向3d的,要习惯操作向量,

我习惯了,问题是这引擎不懂操作向量!连基本的抛物线、曲线都实现不了,还要自己重新写曲线!

曲线有特定api

这个是设置y的,你改下就设置x了

tween(this.node.position)

                        .to(0.2, {y: 20}, {

                            onUpdate: (target: Vec3, ratio: number)=>{

                                toggleItem.node.position = target;

                            },

                            easing: "expoOut"

                        }).start();
1赞