http://www.unitymanual.com/thread-25242-1-1.html
2014-09-17 21:40
330 查看
http://www.unitymanual.com/thread-25242-1-1.html
今天的主题-事件在我们所接触到的事件一般分两种:
一种是自定义的,自定义的事件需要自己对其进行赋值。
一种是控件提供方定义的,如:ngui,控件事件只需要查找控件定义的事件列表,选择所需要的进行操作即可。
当然,我们的话题是上面第一种啦。
实例模拟场景为:
游戏战斗中,猪脚在指定的一片区域中,存在4只怪物,他的目的就是一只一只找到并消灭该区域的怪物。
简易流程:查询目标->行走->攻击,依次循环
ok,在此,我用代码快速模拟这样一个情景,建立一个Hero类,如下:
[C#] 纯文本查看 复制代码
?
注:仅仅为了指导一个思想,真正战斗逻辑代码肯定不是这样的,好多东西我都直接文字描述代过了,毕竟今天主题不是这个。
好了,接下来绑定代码到任何对象,设置怪物个数
运行如下:
行了,上面代码虽然完成了所描述的功能,可是这样代码质量很差的,如果策划那天来些奇葩需求,如:我要人物可以飞着移动,我要攻击的时候打个降龙十八掌等等
那么,说不定第二天又有新闻某某公司程序通宵加班,猝死。。。
为了防止善变的策划,那我们在做东西的时候就得聪明一点了,那又应该如何来写呢?
先埋个伏笔,先来说说今天的主题事件
事件是什么?对代码 有什么用?又该如何使用?
让我们一起带着疑问往下走,
首先,我还是得先谈谈委托,委托事件委托事件,从字面意思就可看出委托是事件的基础,也有一种说法事件是特殊化的委托。
委托:使用委托可以将方法应用(不是方法)封装在委托对象内,然后将委托对象传递给调用方法的代码,这样编译的时候代码就没有必要知道调用哪个方法。
通过使用委托程序能够在运行时动态的调用不同的方法。 具体实现见《【unity 代码升华篇】委托、事件全解析(一)》。
事件:在此要分2个部分来说,暂叫它们为事件发行者、事件接收者。事件发行者:指对象自身状态信息发送变动时,就触发一个事件,并通知事件接收者发生了一个操作。
就如生活中我们常常面对的策划,某天突然找到你说 需求发生了改变 ,呵呵...苦逼的程序也只有呵呵面对了。(趁机黑下策划)
事件接收者:指接收到事件发行者的消息后,通常需要提供一个事件处理的方法,在事件发行者触发一个事件后,会自动执行这个方法。
这就是生活中程序要干的事情了..
以下为事件处理机制模型:
简单来讲:
就是说当一个结果发生时,有可能引起另外的一些反应,就好比佛家常说的因果关系,而事件,就是这个因果关系的内部联系。
在此还有个东西有必要提下,
Observer 设计模式,主要包括如下两类对象
1.Subject:监视对象,它往往包含着其他对象所感兴趣的内容。在本范例中,角色的目标就是一个监视对象,它包含的其他对象所感兴趣的内容,就是Targetid字段,当这个字段的值变为0时,会把数据发给监视它的对象。
2.Observer:监视者,它监视Subject,当Subject
中的某件事发生的时候,会告知Observer,而Observer 则会采取相应的行动。
在本范例中,Observer 有查询和行走,它们采取的行动分别是查询目标和向目标移动。
好了,事件基本含义了解了,下面通过5个步骤用代码实例进行一次深入探讨:
1.声明事件(定义事件).
2.注册事件 .
3.实现事件.
4.触发事件.
5.为事件增加“添加/删除”方法.
一、声明事件(定义事件)
首先,要建立委托,格式为:
public delegate void 委托名(object sender, EventArgs e);
1.对象:sender
2.参数:
object sender: 指触发对象(如:Button).
EventArgs e :则为引发这个事件的原因,包含了Observer 所感兴趣的数据,在本例中是Targetid.
委托名一般格式是:名字+EnvenHandle。这样取名比较规范。
如下:
[C#] 纯文本查看 复制代码
?
然后,建立一个事件字段:
public event 委托类型 事件名;
注意:event关键字代表事件,返回类型为委托
如:
//===================
//用event关键字声明事件对象
public event TestEnvenHandle testEvent;
//===================
再定义一个方法,处理事件,再本例中为OnTargetChange (EventArgs e),
使用virtual 的方法供内部的代码调用,接收一个testEventArgs 对象,这个对象包含要传递给消息接收方的一些信息
[C#] 纯文本查看 复制代码
?
最后还要创建触发事件的方法。例子中为selectTarget(),在其方法中,当条件满足则调用OnTargetChange 来达到触发事件的目的。
[C#] 纯文本查看 复制代码
?
再使用事件时,通常要定义两个方法,一个是和事件定义的委托签名一致的方法,
在本例中分为,朝目标行走
[C#] 纯文本查看 复制代码
?
攻击目标
[C#] 纯文本查看 复制代码
?
绑定事件的方法很简单,用+=表示添加事件,-=表示删除事件。
[C#] 纯文本查看 复制代码
?
运行修改后的代码:
ok,完全没问题,修改后的代码我就不贴出来了,我放百度云需要的大家自己去下载哈
后面总结得有些乱,附上源码 大家可以对照看,都有详细注释,方便大家更容易理解。
通过使用事件方式,代码真变得整洁很多,方便管理 而且可扩展性超强哟,希望大家看后也能在代码方面有更好的提升,
欢迎吐槽,欢迎点赞...谢谢大家
好了,今天就先讲到这里啦,累死了
下面是完整代码下载地址:http://pan.baidu.com/s/1i3FZHMt
今天的主题-事件在我们所接触到的事件一般分两种:
一种是自定义的,自定义的事件需要自己对其进行赋值。
一种是控件提供方定义的,如:ngui,控件事件只需要查找控件定义的事件列表,选择所需要的进行操作即可。
当然,我们的话题是上面第一种啦。
实例模拟场景为:
游戏战斗中,猪脚在指定的一片区域中,存在4只怪物,他的目的就是一只一只找到并消灭该区域的怪物。
简易流程:查询目标->行走->攻击,依次循环
ok,在此,我用代码快速模拟这样一个情景,建立一个Hero类,如下:
[C#] 纯文本查看 复制代码
?
好了,接下来绑定代码到任何对象,设置怪物个数
运行如下:
行了,上面代码虽然完成了所描述的功能,可是这样代码质量很差的,如果策划那天来些奇葩需求,如:我要人物可以飞着移动,我要攻击的时候打个降龙十八掌等等
那么,说不定第二天又有新闻某某公司程序通宵加班,猝死。。。
为了防止善变的策划,那我们在做东西的时候就得聪明一点了,那又应该如何来写呢?
先埋个伏笔,先来说说今天的主题事件
事件是什么?对代码 有什么用?又该如何使用?
让我们一起带着疑问往下走,
首先,我还是得先谈谈委托,委托事件委托事件,从字面意思就可看出委托是事件的基础,也有一种说法事件是特殊化的委托。
委托:使用委托可以将方法应用(不是方法)封装在委托对象内,然后将委托对象传递给调用方法的代码,这样编译的时候代码就没有必要知道调用哪个方法。
通过使用委托程序能够在运行时动态的调用不同的方法。 具体实现见《【unity 代码升华篇】委托、事件全解析(一)》。
事件:在此要分2个部分来说,暂叫它们为事件发行者、事件接收者。事件发行者:指对象自身状态信息发送变动时,就触发一个事件,并通知事件接收者发生了一个操作。
就如生活中我们常常面对的策划,某天突然找到你说 需求发生了改变 ,呵呵...苦逼的程序也只有呵呵面对了。(趁机黑下策划)
事件接收者:指接收到事件发行者的消息后,通常需要提供一个事件处理的方法,在事件发行者触发一个事件后,会自动执行这个方法。
这就是生活中程序要干的事情了..
以下为事件处理机制模型:
简单来讲:
就是说当一个结果发生时,有可能引起另外的一些反应,就好比佛家常说的因果关系,而事件,就是这个因果关系的内部联系。
在此还有个东西有必要提下,
Observer 设计模式,主要包括如下两类对象
1.Subject:监视对象,它往往包含着其他对象所感兴趣的内容。在本范例中,角色的目标就是一个监视对象,它包含的其他对象所感兴趣的内容,就是Targetid字段,当这个字段的值变为0时,会把数据发给监视它的对象。
2.Observer:监视者,它监视Subject,当Subject
中的某件事发生的时候,会告知Observer,而Observer 则会采取相应的行动。
在本范例中,Observer 有查询和行走,它们采取的行动分别是查询目标和向目标移动。
好了,事件基本含义了解了,下面通过5个步骤用代码实例进行一次深入探讨:
1.声明事件(定义事件).
2.注册事件 .
3.实现事件.
4.触发事件.
5.为事件增加“添加/删除”方法.
一、声明事件(定义事件)
首先,要建立委托,格式为:
public delegate void 委托名(object sender, EventArgs e);
1.对象:sender
2.参数:
object sender: 指触发对象(如:Button).
EventArgs e :则为引发这个事件的原因,包含了Observer 所感兴趣的数据,在本例中是Targetid.
委托名一般格式是:名字+EnvenHandle。这样取名比较规范。
如下:
[C#] 纯文本查看 复制代码
?
public event 委托类型 事件名;
注意:event关键字代表事件,返回类型为委托
如:
//===================
//用event关键字声明事件对象
public event TestEnvenHandle testEvent;
//===================
再定义一个方法,处理事件,再本例中为OnTargetChange (EventArgs e),
使用virtual 的方法供内部的代码调用,接收一个testEventArgs 对象,这个对象包含要传递给消息接收方的一些信息
[C#] 纯文本查看 复制代码
?
[C#] 纯文本查看 复制代码
?
在本例中分为,朝目标行走
[C#] 纯文本查看 复制代码
?
[C#] 纯文本查看 复制代码
?
[C#] 纯文本查看 复制代码
?
ok,完全没问题,修改后的代码我就不贴出来了,我放百度云需要的大家自己去下载哈
后面总结得有些乱,附上源码 大家可以对照看,都有详细注释,方便大家更容易理解。
通过使用事件方式,代码真变得整洁很多,方便管理 而且可扩展性超强哟,希望大家看后也能在代码方面有更好的提升,
欢迎吐槽,欢迎点赞...谢谢大家
好了,今天就先讲到这里啦,累死了
下面是完整代码下载地址:http://pan.baidu.com/s/1i3FZHMt
相关文章推荐
- http://www.boobooke.com/bbs/thread-51022-1-1.html
- 全程视频指导刷机帖,新手刷机必阅!(含各类Hero ROM与最新Radio)(转http://www.hiapk.com/thread-53163-1-1.html)
- http://www.linodeclub.com/thread-856-1-1.html
- ASIHTTPRequest中文入门教程全集 http://www.zpluz.com/thread-3284-1-1.html
- 开源Jpeg解码模块,ChaN(FatFs 作者)又一力作,代码精炼,体积小巧,很容易移植(有图有 http://www.amobbs.com/thread-5255634-1-1.html
- 扩展 自定义 LinearLayout 自定义的一个网址http://www.eoeandroid.com/thread-19388-1-1.html
- VC 常用技巧总结 - 108条(转http://www.cctry.com/thread-258-1-1.html)
- MFC加载皮肤 转自:http://www.cctry.com/thread-4032-1-1.html
- http://www.eoeandroid.com/thread-297188-1-1.html
- 使用Vim+Ctags+Cscope阅读源代码 http://www.lupaworld.com/forum-viewthread-tid-49968.html
- http://www.unitymanual.com/page/6
- http://www.linuxdiyf.com/bbs/thread-90655-1-8.html
- http://www.nokiabbs.com/thread-388955-1-1.html
- http://www.eoeandroid.com/thread-158250-1-1.html
- 时钟页面置换算法 转自CSkaoyan论坛的zju童鞋 http://www.cskaoyan.com/thread-4777-1-1.html
- 使用OpenGL开发一个指南针 (http://www.hiapk.com/thread-513153-1-1.html)
- http://www.eoeandroid.com/thread-9633-1-1.html
- Lisp的本质(The Nature of Lisp) (转:http://www.lispchina.com/bbs/thread-252-1-1.html)
- [古董贴][共享]AVR通用EERPOM读写函数,兼容ICC原有的eeprom.h... http://www.amobbs.com/thread-1196774-1-1.html
- http://www.boobooke.com/bbs/thread-10284-1-1.html