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",只有最后一个有效,后面会覆盖前面的。