文/宋忆疆 上一期专栏, 我曾提到. N E T提供了一个特性叫做反射(Reflection),其实反射并不是.NET所独有的。在这一期专栏,我想和大家讨论一下反射这个特性,在游戏开发中的应用,以及发展前景。 在原生的C++程序中,我们通常会定义一些类,并且为这些类写一些方法、成员等。这些方法和成员,实现了某个游戏功能,或者记录某些数据。通常它的作用区域都是存在于编译器编译期。通过C++编译器,这些类、函数、变量就会变成一些实实在在的地址,执行模块也会给这些取一些只有它自己才知道意义的名字。然而,我们有时候会有这样的想法:我能不能在某种时候,调用进程里名叫“GetNpcName()”的函数,并且,还能给它传递所必须的参数,以得到这个函数的返回值呢? 显然,在原生C/C++一类的静态语言,目前是不具备这样能力的,而Python一类的解释性脚本,显然要做到这个要费一些周折,并且性能十分低下。在.NET框架下,引入了一个数据结构描述数据—元数据,在元数据里面,它记录了编译器编译过程中获得的各种信息,包括类名、函数名、函数参数、函数返回值、变量名、变量相对偏移,等等。在应用程序集加载的时候,这个元数据被加载起来,当用户需要这些数据,可以通过一些特殊接口来获得,并且处理执行。 那么拥有Reflection这个特性后,我们在游戏开发中,可以获得哪些好处提供了一个特性叫做反射(Reflection),其实反射并不是.NET所独有的。在这一期专栏,我想和大家讨论一下反射这个特性,在游戏开发中的应用,以及发展前景。 在原生的C++程序中,我们通常会定义一些类,并且为这些类写一些方法、成员等。这些方法和成员,实现了某个游戏功能,或者记录某些数据。通常它的作用区域都是存在于编译器编译期。通过C++编译器,这些类、函数、变量就会变成一些实实在在的地址,执行模块也会给这些取一些只有它自己才知道意义的名字。然而,我们有时候会有这样的想法:我能不能在某种时候,调用进程里名叫“GetNpcName()”的函数,并且,还能给它传递所必须的参数,以得到这个函数的返回值呢? 显然,在原生C/C++一类的静态语言,目前是不具备这样能力的,而Python一类的解释性脚本,显然要做到这个要费一些周折,并且性能十分低下。在.NET框架下,引入了一个数据结构描述数据—元数据,在元数据里面,它记录了编译器编译过程中获得的各种信息,包括类名、函数名、函数参数、函数返回值、变量名、变量相对偏移,等等。在应用程序集加载的时候,这个元数据被加载起来,当用户需要这些数据,可以通过一些特殊接口来获得,并且处理执行。 那么拥有Reflection这个特性后,我们在游戏开发中,可以获得哪些好处呢?这里简单介绍一些常用的应用:

  • 编辑器数据和UI的绑定。有了Reflection特性,我们可以做一个统一的规范,让编辑器界面和程序内数据结构直接映射,减少大量繁杂的关联代码。
  • 游戏对象的动态创建和初始化。在MFC一类的类库中,通常会提供一套RTTI(运行时类型信息)来做动态创建,创建和初始化参数等处理起来就不会力从心了。
  • 游戏内功能模块组合配置化。比如要做一个流程处理,某种情况下面调用某些代码工作。但是希望这个调用能灵活配置,那么可以通过一个配置文件,或者数据库字段,获得处理函数入口和参数。这样,后面的各种功能配置组合,都可以交给策划去填写配置文件或者数据库字段。
  • 类似游戏内图文排版一类需要高度灵活可配置的模块,用Relfection是一个很不错的选择,可以比较轻松面对各种调整修改。

在.NET平台,配合Reflection,还有Attribute系统。Attribute的作用,是对用户所写的代码进行一些标注。比如可以给一个类添加一个Attribute,打上一个标注,这个类是用来描述NPC行为的, 然后再给这个类成员函数标志Attribute,申明这个函数是用来处理NPC被交互的时候调用的,等等类似。 然后可以自己写程序, 搜集程序集内,所有打上这些标记的类和函数,然后统一做逻辑处理。 作者介绍:宋忆疆,参与《碧血情天》,《傲世三国2》,《乱舞天下》等游戏研发。目前担任《流星蝴蝶剑OL》项目制作人。 《程序员》11年04期精彩内容:HTML5来临! 《程序员》杂志订阅

反射在游戏开发中的应用相关推荐

  1. 手把手教你架构3d游戏引擎pdf_游戏开发中的算法

    游戏技术这条路,可深可浅.你可以满足于完成GamePlay玩法层面的东西,你也可以满足于架构和框架设计层面的东西,你也可以醉心于了解某一游戏引擎带来的掌控感.但是,我们不该止步于此,止步与目前所见或所 ...

  2. 【转载】【《Real-Time Rendering 3rd》 提炼总结】(九) 第十章 · 游戏开发中基于图像的渲染技术总结

    本文由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/78309500 这是一篇近万字的总结式 ...

  3. 【《Real-Time Rendering 3rd》 提炼总结】(十一) 第十四章 : 游戏开发中的渲染加速算法总结

    本文由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/78884513 导读 这是一篇1万3千 ...

  4. VR硬件演进与其游戏开发中的若干注意事项

    最近两年虚拟现实(Virtual Reality,简称VR)从刚刚走进公众视野到逐渐变得炙手可热,很多不同领域的IT开发者都想进入虚拟现实领域.本篇文章将首先讲解VR入门所需要学习的知识,然后从VR软 ...

  5. 【《Real-Time Rendering 3rd》 提炼总结】(九) 第十章 · 游戏开发中基于图像的渲染技术总结

    本文由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/78309500 这是一篇近万字的总结式 ...

  6. 坦克大战游戏开发中的设计模式总结

    坦克大战游戏开发中的设计模式总结 github地址: https://github.com/2017403603/TankGame_Simple1.0.git https://github.com/2 ...

  7. 斗牛怎么玩法算法_游戏开发中的算法

    游戏技术这条路,可深可浅.你可以满足于完成GamePlay玩法层面的东西,你也可以满足于架构和框架设计层面的东西,你也可以醉心于了解某一游戏引擎带来的掌控感.但是,我们不该止步于此,止步与目前所见或所 ...

  8. 【转载】【《Real-Time Rendering 3rd》 提炼总结】(十一) 第十四章 : 游戏开发中的渲染加速算法总结

    本文由@浅墨_毛星云 出品,转载请注明出处.    文章链接:  http://blog.csdn.net/poem_qianmo/article/details/78884513 导读 这是一篇1万 ...

  9. 一些语法在游戏开发中的应用

    一些语法在游戏开发中的应用 一.减少不必要的全局变量 二.动态二维数组 三.整数转换为字符串输出 四.播放音乐模板 一.减少不必要的全局变量 游戏开发中有些变量只需要在少数函数中传递,修改数值.如果不 ...

最新文章

  1. Layman’s explanation of SAP IS Retail concepts: assortments and listing
  2. 晶振噪声及杂散_如何判断是否需要使用分立式晶振和振荡器呢?
  3. ReentrantLock 实现原理
  4. NAP客户端计算机隔离测试之五
  5. [云炬创业基础笔记] 第四章测试3
  6. 【题目解析】1015 Reversible Primes (20 分)_27行代码AC
  7. WCF从理论到实践(14):WCF解决方案模板 (转)
  8. ES6 深拷贝_你别自以为是:ES6误区 之 Object.assign()、const
  9. html5连接mysql数据库操作_html5-本地数据库的操作
  10. 使用Django开发简单接口:文章增删改查
  11. java中的垃圾收集器_Java中的垃圾收集
  12. eCognition易康domain is empty原因
  13. DOS命令是如何操作目录和文件夹的?
  14. 计算机专业拼音怎样写,电脑的拼音怎么打
  15. npm install xxxx --legacy-peer-deps命令是什么?
  16. 摘android手机自带浏览器无法识别apk文件
  17. C#注册Email发送验证码详解
  18. Android 界面一键变灰/黑白
  19. 基于单片机的模拟电磁曲炮设计
  20. 财报向好背后,特步的持续爆发力

热门文章

  1. 上游服务器响应无效怎么办,Nginx 当上游服务器返回失败时的处理办法
  2. 如何异地搭建虚拟局域网天联帮您解决
  3. Redis锁机制处理高并发
  4. 苏教版三年计算机教案,2021苏教版三年级信息技术上学期教学计划
  5. php 源代码分离,迅睿CMS 网站安全权限划分
  6. 第七章 虚拟机类加载机制
  7. vue cli 3x降到2x
  8. python简单心形代码爱情闪字_寄语大全之qq空间伤感寄语闪字
  9. topik怎么读_韩语TOPIK的1-6级是个什么概念呢?
  10. 【蓝桥杯】格子刷油漆