今天使用NGUI的TweenScale时遇到一个问题
使用时TweenScale是用两次,playForward()和playReverse(),要求playForward()后啥都不做,playReverse()后执行函数
由于动画播放需要时间,不可能执行完playReverse()代码就执行指定函数
NGUI提供了对应的委托处理,所以思路上是在playForward()时将onFinished置为null,playReverse()时添加指定方法
对应代码
EventDelegate.Callback panelClose= PanelClose; panelScale.SetOnFinished(panelClose);
panelScale.onFinished = null;
运行,没问题,一切正常
导出apk测试发现相应函数没执行
回到unity,测试是没问题的,不经意间选择其他GameObject,在进行测试,问题出现了
检查相应代码,将置null代码改成如下代码
EventDelegate.Callback finish = null; panelScale.SetOnFinished(finish);
NGUI中的事件回调将用户添加的数据加入到链表,链表中每项包含一个MonoBehaviour target 和 string methodName
public List<EventDelegate> onFinished = new List<EventDelegate>();
public void SetOnFinished (EventDelegate.Callback del) { EventDelegate.Set(onFinished, del); } static public void Set (List<EventDelegate> list, Callback callback) { if (list != null) { list.Clear(); list.Add(new EventDelegate(callback)); } }
从NGUI代码中可以发现,一开始设置的onFinished和后面设置的setOnfinished两个是完全不同的操作
一个是将链表onFinished = null,一个是将链表onFinished.clear(),并添加null到链表
看到这里,在将上面的两句代码改成下面这句
panelScale.onFinished.Clear();
经过测试,一切正常
这里只需要清空和添加一个委托,如果需要多个的,可以参考AddOnfinished()和RemoveOnFinished()这两个函数
NGUI中TweenScale回调函数设为null时导致的BUG
原文地址:http://blog.csdn.net/suifcd/article/details/43529031