IDSoft毁灭战士3游戏引擎;所有的资源都存储在后缀名为.pk4的文件中,其实是个zip文件;除了图片,视频,音频(不能做成文本性质)外。所有的资源(例如关卡,骨骼动画,材质等)都是基于一套简单的,统一的词法规则进行描述的。
使用面向接口的方式实现词法解析器,涉及到TypeScript,ts的知识笔记在TypeScript分类中。本书中用到的ts知识有(1)ES6模板字符串;(2)接口定义和扩展(使用implement关键词实现接口);(3)类的定义,继承(使用extends)及成员的访问级别(public private protect);(4)枚举;(5)显示断言赋值(有难度);(6)类型别名的用途;(7)函数方法的签名(与C#一样)与回调详解(重点);(8)泛型编程(ts有强大的泛型系统);(9)联合声明(参数或者返回值有多种类型,需要一起写出来);(10)模块化开发(export,import)
三个贯穿全书的设计模式(1)工厂方法模式:产生接口,接口不是类,不能用new的方法(2)泛型迭代器模式:因为Doom3的词法解析器适合迭代,该书中用的最多的设计模式(3)模板方法模式:规定了代码运行的流程,在这种形式下写框架都是封装不变的部分,将可变的部分以模板方法或者是虚函数的方式公开给第三方,或者是实现者。
Doom3引擎词法解析的规则和状态表,这是一个经典的状态设计模式,但该书中不适用,因为改书的例子不复杂,直接使用if else 或者 switch case来表达更加简单清晰。如果当规则超过10以上,那么需要使用设计模式中的状态设计模式
通过XMLHttpRequest从服务器请求各种资源,因为Doom3的资源都是存放在服务器上的,所以需要使用XMLHttpRequest请求资源,如果不使用XMLHttpReques,会面临跨域的问题。(1)封装了XMLHttpRequest,从同步和异步之间的区别描述;(2)从同步的弱点描述,从而为什么使用异步。在该情况下XMLHttpRequest可以支持TEXT文本格式,JSON格式,XMLDocument/HTMLDocument格式,二进制Binary(Blob/ArrayBuffer)格式