Flash社交游戏开发攻略连载(五)——反射的应用
来源:互联网 发布:手机国外电视直播软件 编辑:程序博客网 时间:2024/05/18 01:56
反射(Reflection),是众多面向对象语言都有的功能,不过我在论坛上常常看到有人不理解反射的用途,甚至有人说反射没有任何用处。今天我不讲反射究竟有多少可挖掘的地方,我们就着我们的游戏内容,来讲一下反射的现实应用,很多东西,不用你是不知道的。
我们来到花园游戏,花园游戏中有许多的花,很多很多,估计有108种,并且一直在不断的增加。大家都知道,花肯定是flash做好的元件,因此我们要去库里面取,从库里面取也有很多种方法。最简单的就是在库里面元件中的属性点导出,然后在程序里就可以去实例化这个类了。比如你导出类的名字是Flower1, 那么在程序里你就可以这么写:var flower=new Flower1();然后就可以将这个类的实例添加到屏幕了。那么,如果真的这么去做游戏,你就会发现很多问题:1、每次新增加一朵花,我就不得不修改程序,重新新增加一个类的实例化过程。2、如果你想要把主程序和这些资源文件分离的话,你甚至都无法正确编译你的程序,因为在主程序中,并没有Flower1这个类。
所以我们使用了反射,在这种情况下,反射的作用相当于用字符串来取代类名,正因为他是字符串,你可以不顾及这个类当前存不存在。
好了我们开始做了,我很简单的讲一下我们的做法,我们把花的元件全部放到一个单独的fla中,每个花都有单独的导出,从Flower1到Flower108,然后生成flower_asset.swf,我们在主程序中加载这个swf文件,与此同时我们加载一个XML配置文件(具体如何加载我之后会详细说明),总之我就是加载,并且读取到了每个id的花所对应到的导出类名(比如id为20001的红玫瑰花对应的元件的类是Flower1),现在我要显示出某个用户的所有的花,比如这个用户有个花朵的数组,数组中有如下数据[20001,20002,20001,20003],那么我们就做一个循环,实例化所有的FlowerXXX的类,然后添加到舞台上。
我们先在文档类中添加一个静态方法:
public static function getMovieClip(mcname:String) : MovieClip
{
try
{
var mcClass:* = Class(getDefinitionByName(mcname));
if (mcClass == null)
{
return null;
}
return new mcClass;
}
catch (e)
{
return null;
}
return null;
}
注意我使用了try,这是为了系统的稳定性,即便因为一些特殊原因,我们取到了一些错误或者过期的数据(比如有一朵花现在已经在我们的库中删除了,但是因为策划疏忽而没有删除),我们也可以良性地处理这个问题而不至于flash报错。
然后我们在程序中就可以调用这个方法,根据从配置文件中取到的类名的字符串,调用getMovieClip方法去库中取到相应的元件。几乎在我们所有涉及到显示的类中,最后都有调用到该方法。
反射的好处在于,动态的决定了主程序将要调用的类,比如一个玩家的场景中只有5种花,我们就没必要让程序导入108个花的类(从性能上来说,反射其实是有待考究的,因为动态的东西通常比静态的慢,但是这其中的性能的得失很复杂,大家可以再讨论。)就从开发以及维护的角度来说,尽量减少编译以及版本发布的次数,让程序更容易被“定制”总是比将代码写死在程序中要好得多。
- Flash社交游戏开发攻略连载(五)——反射的应用
- Flash社交游戏开发攻略连载(二)——基础控制流1
- Flash社交游戏开发攻略连载(三)——基础控制流2
- Flash社交游戏开发攻略连载(四)——基础控制流3
- Flash社交游戏开发攻略连载(一)
- Flash开发iOS应用全攻略(五)——如何上传应用到iTunes Connect
- Flash开发iOS应用全攻略(五)——如何上传应用到iTunes Connect
- Flash开发iOS应用全攻略(五)——如何上传应用到iTunes Connect
- Flash开发iOS应用全攻略(五)——如何上传应用到iTunes Connect
- 【连载】Unity3D ——强大的跨平台3D游戏开发工具(五)
- Flash开发iOS应用全攻略(四)——如何为iTunes Connect准备应用
- Flash开发iOS应用全攻略(四)——如何为iTunes Connect准备应用
- Flash开发iOS应用全攻略(四)——如何为iTunes Connect准备应用
- Flash开发iOS应用全攻略(四)——如何为iTunes Connect准备应用
- Flash开发iOS应用全攻略(四)——如何为iTunes Connect准备应用
- 开发社交应用的利器——Ejabberd 一瞥
- Flash开发iOS应用全攻略(三)——如何使用iOS开发者授权以及如何申请证书
- Flash开发iOS应用全攻略(三)——如何使用iOS开发者授权以及如何申请证书
- 在尝试重新安装一个服务时遇到这样的错误:指定服务已标记为删除
- Flash社交游戏开发攻略连载(三)——基础控制流2
- response.setHeader()的用法
- [设计模式] 策略模式联想
- Flash社交游戏开发攻略连载(四)——基础控制流3
- Flash社交游戏开发攻略连载(五)——反射的应用
- python - 基础类型 - bool
- 标准C语言中的字符串处理函数
- perl的splice函数
- 误会
- 历史洪水管理软件
- 无线网址查询功能(原创)
- [总结] Eclispe 插件面试题
- 封装libspf