码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-02-05 16:25:50      阅读:369      评论:0      收藏:0      [点我收藏+]

标签:ngui   动画   callback   onfinish   

今天使用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

标签:ngui   动画   callback   onfinish   

原文地址:http://blog.csdn.net/suifcd/article/details/43529031

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!