NGUI中TweenScale回调函数设为null时导致的BUG

今天使用NGUI的TweenScale时遇到一个问题

使用时TweenScale是用两次,playForward()和playReverse(),要求playForward()后啥都不做,playReverse()后执行函数

由于动画播放需要时间,不可能执行完playReverse()代码就执行指定函数

NGUI提供了对应的委托处理,所以思路上是在playForward()时将onFinished置为null,playReverse()时添加指定方法

对应代码

EventDelegate.Callback panelClose= PanelClose;panelScale.SetOnFinished(panelClose);置为null时代码panelScale.onFinished = null;选中添加TweenScale的GameObject,以便实时查看

运行,没问题,一切正常

导出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

相关文章:

你感兴趣的文章:

标签云: