2013年3月3日
摘要: 资源引用 资源系统主要处理的是那些被叫做"Declared"资源,这个术语也可以理解为资源的申报,即存在于磁盘上的资源定义文件. 当资源系统发现了一个资源定义文件便等于发现了一个"Declared"资源. "Declared"资源只不过是工作的一部分,一个明显的原因就是有了资源你必须能使用它们.当你使用一个资源的时候,你将它的资源编号赋予了对象实例,这些对象又保存在了TAML文件中,比如场景或者其他的对象集合. 不管TAML的内容是什么,总有很多的对象对保存这些资源的编号. 一个好的资源系统,不仅能够承担起维护"Declar 阅读全文
posted @ 2013-03-03 21:28 Kevin Game 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 资源的定义 我们以ImageAsset为例:<ImageAsset AssetName="background" ImageFile="sky.png"/> 不去关心这个资源类型的细节,单从上面的配置来看,有三个元素: 1. ImageAsset: 资源类型名 2. AssetName:资源名 3. ImageFile: 图像文件名(松散资源文件) 这里要注意的是AssetName,它是组成AssetId的重要部分,AssetId是资源的唯一编号,组成规则为: <ModuleId>:<AssetName> 比如: 我们 阅读全文
posted @ 2013-03-03 20:24 Kevin Game 阅读(315) 评论(0) 推荐(0) 编辑
摘要: 资源系统的组成部分 1. 资源收集 2. 资源标识 3. 资源加载/卸载 4. 资源依赖 5. 资源分组 6. 资源查找 7. 资源元数据管理 8. 资源重命名,重定位,删除预备知识 资源系统会使用到前面我们说过的模块系统,需要监听模块系统的事件,比如模块的加载/卸载. 当收到某个模块加载的事件后,资源系统会及时的加载这个模块所需要的资源. 同样的在收到模块卸载事件后,卸载掉它所使用的资源. 这里需要注意的细节是资源系统的加载卸载操作是由模块系统的模块加载/卸载来触发的,具体的资源加载/卸载机制后面会讲到. 另外资源系统和许多Torque中的子系统一样,所使用的也是T... 阅读全文
posted @ 2013-03-03 14:06 Kevin Game 阅读(274) 评论(0) 推荐(0) 编辑
摘要: TAML 编译当你要将一个对象写入到TAML时,并不意味着之写入单一的对象,写入操作同样将作用于他的子对象.在写入的时候会遵循若干个步骤:查找所有静态和动态的属性Field进行写入,保存.查找所有的子对象进行写入,保存.查找所有自定义状态进行写入,保存.静态和动态属性的编译这个过程实际上是由两部分组成,首先是遍历所有的静态属性域,并检测他们是否应该被写入文件.要注意的是这个检测操作只在没有前置调用WriteDefaults的情况下执行.在引擎的属性域系统中预先指定了每个属性的相关接口,有设置,获取,写入方法,如下:addProtectedField("Angle", Typ 阅读全文
posted @ 2013-03-03 12:26 Kevin Game 阅读(368) 评论(0) 推荐(0) 编辑
  2013年3月2日
摘要: TAML是Toque Application Mark-up Language的缩写,贯穿这个Torque开发过程.TAML被设计的非常容易使用.预备知识在了解TAML之前需要前对Torquescript语法有所了解.脚本导出方法Taml开始TAML被设计的易于使用,比如下面的情况,代码简洁易懂:// Create a sprite.%obj = new Sprite();// Write it out.TamlWrite( %obj, "stuff.taml" );写入XML文件后的结果为:<Sprite/>这个简单的例子体现了一个基本的原理,当TAML输出到 阅读全文
posted @ 2013-03-02 21:40 Kevin Game 阅读(3457) 评论(0) 推荐(0) 编辑
摘要: 综述模块系统的设计初衷是为用户提供一个代码(code)和资源(asset)具有强复用性的开发环境.其中包含了一些重要的组成部分:Module Identity(信息识别)Module Versioning(控制版本)Module Deprecation(模组弃用)Module Grouping(分组)Module Types(类型)Module Dependencies(依赖)Module Meta-data(元数据)Module Load/Unload Notifications(加载/卸载通告)Module Synchronization/Publishing(同步/发布)本质上来说,一个 阅读全文
posted @ 2013-03-02 19:15 Kevin Game 阅读(334) 评论(0) 推荐(0) 编辑
摘要: 状态控制和其他编程语言一样,TorqueScript支持分支结构.if, then, elseif(<boolean expression>) { pass logic}else { alternative logic} // 控制灯光的全局变量$lightsShouldBeOn = true;// 检查灯是否应该打开if($lightsShouldBeOn){ // 开灯 turnOnLights(); echo("Lights have been turned on");}else{ // 关灯 turnOffLights(); echo("Lig 阅读全文
posted @ 2013-03-02 15:10 Kevin Game 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 数字TorqueScript支持的数字类型有四种:123 // 整型1.23 // 浮点123e-4 // 科学计数0xabcd // 十六进制字符串文本,比如名字或者短语词组都可以作为字符串存储.数字也可以以字符串格式存储.标准的字符串存储在双引号标记区域内.如:"123abc"标记字符串存储在单引号标记区域内,如:'123abc'在TorqueScript中,标记字符串会被特殊对待,他们不仅有自己的字符串数据还有一个与之相关联的特殊数字标记.标记字符串通常被用在网络数据发送中,不管实际发送多少次字符串,其字符串数据只会被发送一次,其他的时间都是发送标记值 阅读全文
posted @ 2013-03-02 11:18 Kevin Game 阅读(304) 评论(0) 推荐(0) 编辑
  2013年3月1日
摘要: From: https://github.com/GarageGames/Torque2D/wiki/TorqueScript-Syntax基础主要规则:就像大多数编程语言一样,TorqueScript也有一些明确的语法需要遵守,该语言的容错性强,易于调试,不像C++这种低级语言一样要求严格.编写并观察第一个脚本:// 创建一个局部变量%testVariable = 3;从上面的两行脚本共遵循了三种最简单的规则:1: 分号结尾2: 适当的使用空格(便于观看,良好的代码风格是必要的)3: 注释( 再彪悍的代码也需要注释)每两句代码之间需要有分号隔离,最好是分号+换行,不然Torque会作为一句脚 阅读全文
posted @ 2013-03-01 23:01 Kevin Game 阅读(437) 评论(0) 推荐(0) 编辑
摘要: From: https://github.com/GarageGames/Torque2D/wiki/Directory-Structure目录:目录描述根目录,Exe生成后也是放置在这一层,可以说是工程和运行公用的工作目录.源文件目录,生成目录,工程目录,依赖库目录The bin folder contains the binaries (utility programs) used by the engine for compiling. It is not likely that you will need to dive into these folders for your game 阅读全文
posted @ 2013-03-01 21:20 Kevin Game 阅读(387) 评论(0) 推荐(0) 编辑
摘要: Torque2D MIT 2.0 自2013年2月份开始正式公开,源代码可以下载供广大程序猿学习,使用.官方: http://www.garagegames.com/products/torque-2dGitHub: https://github.com/GarageGames/Torque2DMIT:开源软件许可协议MIT许可证之名源自麻省理工学院(Massachusetts Institute of Technology, MIT),又称「X条款」(X License)或「X11条款」(X11 License)MIT内容与三条款BSD许可证(3-clause BSD license)内容颇 阅读全文
posted @ 2013-03-01 20:21 Kevin Game 阅读(530) 评论(0) 推荐(0) 编辑
  2009年4月2日
摘要: 一、文件和流每个文件不是以文件结束符结束,就是以在由系统维护和管理的数据结构中特定的字节号处结束。文件打开时,就会创建一个对象,将这个对象和某个流关联起来。Cin,cout,cerr,clog这4个对象会自动生成。与这些对象相关联的流提供程序与特定文件或设备之间的通信通道。二、文件处理包括头文件<iostream.h>----------<fstream.h>三、创建顺序访问文件创建了流类ifstream(读入),ofstream(输出),fstream(读入/输出)对象后,便打开了文件。对于ofstream对象,文件打开方式可以是ios::out(将数据输出到文件)或 阅读全文
posted @ 2009-04-02 21:59 Kevin Game 阅读(449) 评论(0) 推荐(0) 编辑
摘要: C++输入/输出流一、流低级I/O功能(如无格式的I/O):通常指大量的字节在设备到内存或内存到设备的简单传输。高级I/O功能(格式化I/O):它将字节组合成有意义的单元,如数据类型。对于大容量文件的处理,使用无格式的I/O可获得最佳的性能。二、成员函数get和getline不带参数值成员函数get ,从指定的流中读取一个字符(即使是空格),并返回该字符作为该函数的调用值。遇到文件结束时返回EOF。get 函数还可以带3个参数:接收字符的字符型数组,数组大小和分隔符(默认为'/n'),从输入流中读取数据时,读取到比指定的最大字符数少一个字符中止,或者读取到指定的分隔符终止。为了 阅读全文
posted @ 2009-04-02 21:47 Kevin Game 阅读(278) 评论(0) 推荐(0) 编辑
  2009年3月14日
摘要: 信息系统(IS:Information System)一般泛指收集,存储,处理和传播各种信息的完整功能集合体。现在信息系统指以计算机为信息处理工具,以网络为信息传输手段的信息系统。信息系统发展四阶段: 1. 电子数据处理阶段(EDP):主要为了减轻人们在计算方面的劳动强度。2. 事务处理阶段(TPS):用来处理企业局部业务的管理。 3. 管理信息系统阶段(MIS):指由人和计算机组成的能进行管理信息收集,传输,存储,加工维护和使用的系统。 4. 决策支持系统阶段(DSS):更加强调支持企业高层决策的系统。信息系统的功能划分: 1. 企业需求角度:需求功能和实现功能。2. 发展阶段角度:初级功能 阅读全文
posted @ 2009-03-14 19:35 Kevin Game 阅读(283) 评论(0) 推荐(0) 编辑
  2009年3月13日
摘要: Policy 和 Policy Classes有助于我们设计出更加安全,有效率且具有高度弹性的“设计元素”。所谓Policy,是用来定义一个class或者class template的接口,该接口以下项目之一或者全部组成:内隐类型定义,成员函数,成员变量。template< class T >struct OpNewCreator{ static T* Create() { return new T; }};template< class T >struct MallocCreator{ static T* Create() { void* pBuf = std::ma 阅读全文
posted @ 2009-03-13 22:11 Kevin Game 阅读(142) 评论(0) 推荐(0) 编辑
  2009年3月12日
摘要: 在OGRE中插件系统扮演了非常关键的角色,它让引擎的灵活性,扩展性大大提高,用户可以通过创建一个DLL的插件类来向引擎添加自定义的各种管理器或者功能模块。但是在单件模式和多个DLL的协作的实现却不是那么的容易,其中包含一些比较细节的问题。下面举一个我刚发生的错误例子:一个插件测试解决方案: 1.一个执行模块(exe)里面又两个文件: FactoryManager.h: 是单件对象FactoryManager头文件(在头文件中实现了所有的功能) Main.cpp: 负责加载插件DLL,并调用工厂管理器实现一些简单输出 2.一个插件库(dll),里面有4个文件: IFactory.h: 工厂接口类 阅读全文
posted @ 2009-03-12 22:57 Kevin Game 阅读(241) 评论(0) 推荐(0) 编辑
  2009年3月11日
摘要: Command Pattern:将请求封装成对象,这可以让你使用不同的请求,队列,或者是日志请求来参数化其他对象,命令模式也可以支持撤销操作。命令模式有两种实现方式:1. 在命令管理器中提供设置当前命令接受者的方法,当执行消息或者是有消息压入的时候直接将命令发送给当前设置的接受者。2. 在命令管理器中建立一个命令接收器队列,通过注册和注销的方式动态增减,而每个接收器会接受到命令,但是只需要针对自己关心的命令进行处理即可。第一种方式比较简单,忽略,重点完成第‘二种方式的测试;/**@ enum: 命令类型ID*/enum enCmdType{ CMD_ON, CMD_OFF, CMD_LIGHT 阅读全文
posted @ 2009-03-11 19:25 Kevin Game 阅读(162) 评论(0) 推荐(0) 编辑
  2009年3月10日
摘要: 读完计算机本科,工作也三年时间了,一直在做游戏开发,都说做游戏的人编程很厉害,我也一直引以为豪,不过最近的几件事情让我感到我一这几年的努力并没有使我进步,反而是退步了,在这里写一些心得体会,大家共勉,别绕弯路。 1.在学习编程的过程中,不会有独孤大侠。 光靠自己的领悟或者是发现来学习是不明智的,因为很难抓住重点,把握方向,从而快速理清各个领域的内在联系。我在西北出生,西北长大,那里的学校里老师在上一门功课的时候不会告诉你以后有什么用处或者在什么领域有重大影响等,比如线性代数,我以前怎么也搞不明白有什么用处,如果当时知道CSDN或者是有良师益友的指点,也不至于在学习3D空间转换的时候那么的郁闷. 阅读全文
posted @ 2009-03-10 20:59 Kevin Game 阅读(170) 评论(0) 推荐(0) 编辑
  2009年3月9日
摘要: Singleton Pattern:单件模式确保在整个应用程序中一个类只有一个实例,并提供全局的访问点。 在单件模式中,产生单件实例的方法是通过类中提供的GetInstance静态方法来获取,由于构造函数是私有,所以无法从外界通过new产生实例,这样为全局唯一实例创造了基础条件。 在程序中适用单件模式的优点在于,不需要在程序启动时静态产生,而可以在运行过程中产生,这样有利于资源的利用。 测试代码如下:/**@ Class: Singleton(单件)*/class Singleton{public: ~Singleton() { if( m_pInstance ) delete m_... 阅读全文
posted @ 2009-03-09 14:50 Kevin Game 阅读(169) 评论(0) 推荐(0) 编辑
  2009年3月8日
摘要: Observer Pattern:定义了对象之间的一对多的依赖,这样一来,当一个对象的状态改变时,它的所有依赖者都会收到通知并自动更新。 类似的思想在游戏中体现很多,比如OGRE中的Listener(监听者)和Hooker(钩子),都是通过注册或者绑定到一个状态体上,当状态体的关注数据变化回调这个“观察者“。OO编程的一个重要原则就是松耦合的使用,这样可以使程序更加的又弹性,更能应对变化。观察者模式就是一个典型的松耦合,观察者和主题分别只暴露了非常少的接口,双方对于彼此可以说完全不知道对方的内部实现,只调用接口就可以。/**@ Class: IObserver(观察者接口类)*/class I 阅读全文
posted @ 2009-03-08 12:18 Kevin Game 阅读(116) 评论(0) 推荐(0) 编辑
  2009年3月7日
摘要: Strategy Pattern:策略模式是一种将操作相同(外表相同)但是实现不同(内在不同)的算法集合起来定义并封装起来,让他们之间可以相互的替换,这种模式可以让算法的变化独立于适用算法的客户。 举例:在CS或者其他游戏可以切换武器的游戏中,游戏角色可以通过某些热键或者其他的触发点来使用不同的武器,适用策略模式就可以解决这个问题,以下是具体的实现方法:(我的UML图插不进来,省略) 如上图所示,将适用武器这个行为(算法)从Character类中直接提取出来作为一个武器算法库,接口类为WeaponBehavior,Character和WeaponBehavior的关系为“有一个”而不是“是一个 阅读全文
posted @ 2009-03-07 15:15 Kevin Game 阅读(157) 评论(0) 推荐(0) 编辑