cc.Action 要被抛弃, 但cc.tween有很多问题。

cc.Action 要被抛弃, 但cc.tween有很多问题。

  1. 看代码:
    onClicked(){
    cc.tween(target).by(1,{y:200}).delay(2.0).by(1,{y:200}).start();
    }
    点击一次后 target的 y 偏移400没错。
    连点n次后,target的 y 偏移却不是 400*n。
    这结果难以预料。

  2. tween提供的api不充分,tween(target) 执行 start()后, target就无法再控制tween的行为。

希望下版本能改进。别急着抛弃旧api.

1赞

如图,我复制的是你源码
this.node.on(cc.Node.EventType.TOUCH_START, () => { cc.tween(this.cube) .by(1, { y: 200 }) .delay(2.0) .by(1, { y: 200 }) .start(); console.log('当前坐标Y:', this.cube.position.y); }, this)
你看下是不是你自己写法有问题你要确定的是你4秒才按下一步 而不是一直按按 。你1秒按200次 和4秒按1次我感觉相差就那么的0.2的距离

用户的操作往往是连贯性的点击,要等上一个tween完成后才能开始下一个tween, 这就限制了用户的操作方式了.
目前来说,tween.by 使用起来并不理想, 需要开发者做额外处理才能达到 cc.moveBy, cc.rotateBy等的效果。

各有各的好处,你可以把这个twenn 分出来一个类, 不单单一个节点可以用,可以节省代码量,其实做个限制也不难。tween 是可以复用的

谢谢反馈,下个版本会提供 stopAllByTag/stopAllByTarget/stopAll

1赞

tween 加这几个api,好像也无法进行叠加操作。 例如当我点击一个按钮,想让 target.y 上移200
onClicked(){
cc.tween(target).by(3.0,{y:200}).start();
}
只有隔3秒点击一次,target才会到达预想位置。但连续点击时,位移就无法预料。

能举个例子怎么分出一个类吗?

如果target销毁了,对应的tween没有销毁,会不会泄漏内存?

1赞

我看了下tween的api,也没有判断运行完的动作,保存下来还要重新clone start(不然直接就报个1001的警告,在动作停止后)

搜了一下_finalAction这个。。移除后也没有置为null。。不知是不是我没想到其它方法:sweat:

求加上pause和resume

请问我目前测试在2.3.3版本上,发现stopAll接口,无法停止正在运行的缓动效果,是我写错了吗?

我调用 cc.tween(this.node).stopAll();接口会提示我stopAll不是一个函数,是我写错了么?

可以给个实例,如何使用它么?谢谢了哈

试试下面的3个
//cc.Tween.stopAllByTarget(this.node);
//cc.Tween.stopAll();
//cc.Tween.stopAllByTag(11);

https://forum.cocos.org/uploads/default/original/3X/9/2/92e0335b8e25209ce6d7a3efe661a8279dc01f37.jpg

你看 tween.js

Tween.stopAll = function () {
      cc.director.getActionManager().removeAllActions();
}

stopAll是在 Tween上的 不是 Tween 实例上. 直接使用 Tween.stopAll(); 就可以了. 不过个人感觉这方法太粗暴,没什么用.

感觉没有Egret的tween好用

请问你觉得哪方面没有呢?

需要start一下,egret的就不用了

1赞

还有吗?12

:grin: cocos 老版本还没有tween ,白玉无冰曾移植过 egret 的 tween 。

https://github.com/baiyuwubing/Tween_ts

现在的 cctween 应该也够用了。

1赞

扩展方法比egret多,start方法确实累赘