对iTween回调的最新理解

本文探讨了iTween在实现缓动效果时存在的回调问题,指出其使用字符串指定回调函数的方式可能导致多个相同名称的函数被误触发。此外,iTween只能保存一个GameObject的回调,后续的回调设置会覆盖先前的。这些问题可能导致不必要的复杂性和错误。

iTween官方地址:http://itween.pixelplacement.com/documentation.php

用iTween可以实现常用的缓动效果,但它基本上只是对缓动算法做了个简单封装,用起来会发现有一些问题。比如回调用字符串的形式指定,还需要xxxtarget指定回调函数所在地,这个设计实在很差,不好用易出问题。

iTween的几个回调函数:

onstart,onupdate,oncomplete 用法一样,各自需要用onstarttarget,onupdatetarget,oncompletetarget指定回调函数在哪个Gameobject上。

GameObject for a reference to the GameObject that holds the "onstart" method

如果在一个gameobject上绑定多个脚本,在脚本里的函数都被这个gameobject持有。如果在不同的脚本都有这个方法:

private void moveComplete()
{

//todo...

}

在其中一个脚本调一个iTween函数:

iTween.MoveTo(this.gameObject, iTween.Hash("x", toX, "y", toY, "time",1,"oncomplete", "moveComplete","oncompletetarget", this.gameObject));

问题来了,缓动结束后, 不仅当前这个脚本的moveComplete会回调,别的脚本里moveComplete也会被回调。

原因是iTween缓动结束后会发送一个字符串的消息给gameobject,在这个gameobject上找到任何字符串为moveComplete的函数都会执行。这就是字符串方式指定回调的缺陷。

还有一个缺陷是之前发现的iTween只能保存一个gameobject回调,同时只能只能存在一个oncomplete的回调:调用不同的缓动函数(或相同的),都指定参数:"oncomplete", "moveComplete",只有最后一个有效,后面会覆盖前面的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值