求指点一个tween的实现方案

以前都是用的2.4版本,现刚接触3.8版本不久。求各位大佬指点一个方案。

我的某个节点,会使用tween.by的方式进行 循环的 上下 移动。
但在移动期间,我随时有可能 修改这个节点的位置。比如拖动或者瞬移等。

但是实际上 在tween期间,无法对节点的坐标信息进行修改,或者说即便修改了,也会被tween给强制拉回去。

这有什么方案可以实现不同的修改位置操作 或者 避免冲突 吗?

你是想拖动的同时,它还要上下移动对吧,给它加个父节点,拖动父节点就行

修改 之前调用一下tween的停止事件呢?

因为一些原因,只能针对单节点操作。我前面说的只是举个例子。 :disappointed_relieved:

:disappointed_relieved:
问题是,我不需要它停止tween事件呀。
(举例)我就是单纯的希望这个节点在循环上下移动时,可以通过点击实现左右位移。

你是用tween改的他的position吗?

是的,因为3.x版本xy被禁用了,只能改position。

没有禁用吧,你可以试试改 node.position.x/node.position.y

我目前的实现方案是把 循环上下移动 写到update里,然后通过点击等操作进行左右位移。
但是我感觉这个方案有点不太合理。

const point = this.startBtn.position;
const anima = tween().by(1, { y: 100 }).by(1, { y: -100 });
tween(point).repeatForever(anima).start();
这样吗?试过了,不行,单纯的修改position下的x和y,并不会触发渲染,实际节点并不会移动。
但是但我通过拖拽修改这个节点时,x可以正常拖拽,y还是强制上下移动,拖拽修改的y不生效。

tween().by(1, { xx.position.y: xx.position.y+100 }) 这样试试

复用vector对象就可以了

不行,目前我测试的结果,只要对节点组件的属性进行tween操作,这个属性就被tween绑死了,外部根本无法干预。

大佬,可以细说一下吗? :pray:

缓动接口 | Cocos Creator

因此,如果是以 node.position 作为缓动目标,需要在 onUpdate 中调用 setPosition 或者 position setter 更新 node 的位置信息。

试试看?

这样只是解决了修改position的xy时可以触发实时修改坐标的问题,但是不能解决属性被tween绑死的情况。

创建一个变量x, tween对x进行0-1的变化,然后在x的set方法里面根据百分比和实时节点的坐标进行计算.

tween里有个update函数,update计算移动或拖拽时的差值

这确实是一个折中方案,和用update的方案差不多,不过比update应该要方便一点。
估计只能是使用这种通过第三方变量的方式来实现了。

我感觉还挺常用的,碰到动画过程 tween对象属性会变化的, 都适合这种第三方变量百分比来算动画过程的属性值。