GameDev-Programming
文章平均质量分 66
ZhuSenLin_BLOG
hardcore programmer
展开
-
服务定位器模式
为某服务提供一个全局访问入口来避免使用者与该服务具体实现类之间产生耦合。(摘自《游戏编程模式》)对于一些在游戏系统各处都可能调用的系统、对象或函数,如果(利用静态类或单例模式)直接调用也会造成一定的耦合——当我们对静态类或单例模式的调用方式进行修改时,我们就需要找到各个调用的代码块并进行修改,而使用服务定位器模式可以解决这个问题。你可以把服务定位当成一个单例模式的集合类,在服务定位器类中,可以汇集大量的静态实例。当我们需要某个实例是,通过静态变量即可获取并调用。示例代码简单的定位器类clas.原创 2021-11-03 10:36:10 · 362 阅读 · 0 评论 -
游戏编程模式之事件队列模式
对消息或事件的发送与受理进行时间上的解耦。(摘自《游戏编程模式》)事件队列模式维护着一个事件队列。元命令入队意味着我们主观想要立即想要执行该命令的相关操作;而出队意味着响应执行该命令相关的操作。受限于各种硬件和软件的情况,这些命令执行并不是立即响应的,但顺序是固定的、也不会出现命令遗漏的情况。我们使用事件队列模式,很重要的目的就是序列唯一且不会遗漏。这一模式适合管理对实时要求不算高的命令响应。和这以模式类似的有:观察者模式和命令模式。但是他们之间的思考方向和解决的问题是不一样的。观察者模式、命令模.原创 2021-10-30 17:05:44 · 1424 阅读 · 0 评论 -
游戏编程模式之组件模式
允许一个单一的实体跨越多个不同域而不会导致耦合。(摘自《游戏编程模式》)组件模式又是一个采用“Have One”实现多态的模式。从客观上来说,Unity引擎的GameObject就是使用组件尤为成功的例子。在使用Unity开发中,我们可以给一个GameObject添加引擎自带或自己编写的组件。下图展示了某个项目中一个VR人物游戏对象上面绑定的组件,我们将从这个案例中引入我们即将介绍的组件模式。根据图片,VR角色模型绑定了Transform、Animator、VRIK、CalibrateSize、.原创 2021-10-28 15:55:46 · 1903 阅读 · 0 评论 -
游戏编程模式之类型对象模式
通过创建一个类来支持新类型的灵活创建,其每个实例都代表一个不同的对象类型。(摘自《游戏编程模式》)有两种实现多态的方式,“Have One”和继承。而类型对象模式就是运用“Have One”。类型对象模式的处理和享元模式类似,都是需要将一类对象的共有部分独立成一个类并采用“Have One”将其一一对应起来。两者的区别主要在于:类型对象模式独享一个实例;而享元模式是通过指针共享一个相同实例。事实上,类型对象模式的主要目的就是简化继承树的规模。假设我们开发的游戏用100种怪物,每一种怪物都有一个共.原创 2021-10-27 14:54:44 · 239 阅读 · 0 评论 -
游戏编程模式之父类沙盒模式
使用基类提供的操作集合来定义子类中的行为。(摘自《游戏编程模式》)沙盒(英语:sandbox,又译为沙箱)是一种安全机制,为运行中的程序提供的隔离环境。(摘自维基百科)在我看来,子类沙盒模式就是一种是代码更紧凑为目的的模式,它更好的约束了程序员对继承的肆意使用。为什么这么说呢?首先我们要了解什么是子类沙盒。上面的引用也提到了沙盒的定义,那么,子类沙盒实质上就是将子类需要用到的相同操作(函数)全部整合到父类中实现。对各个模块函数、遍历、实例的引用全部让父类去做,这样就能避免这一类跨模块调用的代码散.原创 2021-10-27 14:53:03 · 269 阅读 · 0 评论 -
游戏编程模式之字节码模式
通过将行为编码成虚拟机指令,而使其具备数据的灵活性。(摘自《游戏编程模式》)游戏是一个庞大的工程,因此,在开发的过程中我们会选用高稳定性和高效率的重型语言,例如C++。C++的每一次代码更新都需要编译,然而庞大的代码量使得编译时间变得很长。因此,我们需要想办法将可自定义性高、变动可能性高的部分从代码主干中剥离出来(而游戏代码中恰好有很多部分符合这个要求),这样的代码极大的减少每一次更改后需要重新编译的次数。这就是字节码模式最根本的目的。至于其实现原理,很简单,将可变动内容(数值、执行指令、简单逻辑.原创 2021-10-27 14:51:33 · 217 阅读 · 0 评论 -
游戏编程模式之更新模式
通过对所有对象实例同时进行帧更新来模拟一系列相互独立的游戏对象。(摘自《游戏编程模式》)游戏状态更新最好由游戏循环进行调用,而非重新编写while()循环代码,但当我们使用Unity开发游戏的时候,我们有接触到游戏循环的代码吗?我们如何将需要实时调用的代码添加到游戏循环中?相比Unity开发者都很熟悉,每个脚本中都可以添加以下函数:private void Update(){ //每帧调用的代码...}这就是更新模式的运用。引擎只负责将所有的Update()方法放在游戏循环中调用,.原创 2021-10-22 10:48:14 · 967 阅读 · 0 评论 -
游戏编程模式之游戏循环
实现用户输入和处理器速度在游戏行进时间上的解耦。(摘自《游戏编程模式》)游戏作为一个实时互动软件,实时是其核心。在程序里,总有那么一段代码一直在软件运行周期里不断重复着以监听着用户的输入,并根据输入进行对应的响应,这就是游戏循环代码。要注意的是,在游戏循环中不会出现类似UI事件循环中的阻塞,即使你不输入,游戏依旧在运行着游戏循环。试着将游戏逻辑简化为输入处理ProcessInput()、逻辑更新LogicUpdate()、画面渲染Render()、物理更新PhysicUpdate()三个部分(事实.原创 2021-10-22 10:04:50 · 1804 阅读 · 0 评论 -
游戏编程模式之双缓冲模式
问题引入尽管计算机的处理能力相比过去有了极大的进步。但对于实时渲染的游戏程序,仍旧不能在一瞬间将同屏的所有物件全部加载出来。即使可以,用户的硬件条件参差不齐,若运行在性能较低的机器,用户将看到破碎断续加载的画面。从更底层形象地看断续加载的原因,就要了解画面是如何绘制的。计算机维护着一个帧缓冲区,游戏想要显示画面,就需要将像素颜色信息填写到帧缓冲区中。而显示设备就从帧缓冲区中读取像素信息并会知道屏幕上。这时候就会出现一个同步问题——当显示设备从帧缓冲区读取到计算机未填充的信息时,就会照成原本想要绘制的画面原创 2021-10-21 10:24:35 · 269 阅读 · 0 评论 -
游戏编程模式之状态模式
允许一个对象在其内部状态改变时改变自身的行为。对象看起来好像是在修改自身类。。(摘自《游戏编程模式》)我们熟悉的名词:有限状态机(finite state machines,fsm)就是状态模式的应用。正如Unity 的动画状态机。状态机根据上面给出Unity游戏引擎的Animator状态机可以看出,在状态机中,无论任何时刻,在状态中只有一种激活状态。这就是状态模式最鲜明的特点。如何构造自己的状态机呢?我们需要进行如下步骤:枚举所有的状态,并且在这组状态之间可以相互转换。确定在这种状态中.原创 2021-10-20 15:40:11 · 158 阅读 · 0 评论 -
游戏编程模式之单例模式
“确保一个类只有一个实例,并为其提供一个全局访问入口。”(摘自《游戏编程模式》)单例的设计对象本身就不应该拥有多个实例,或如果拥有就不能正常运行。适合使用单例模式的例子有:文件封装类(同一个文件的读与写操作不能同时发生)、日志记录、文件加载、游戏状态存储等单例模式提供了一个单一的实例、提供了全局获取位移实例的方法,这是该模式的重要特性。单例模式是一个双刃剑,我们使用时要保持清醒的头脑...原创 2019-03-22 23:47:15 · 282 阅读 · 0 评论 -
游戏编程模式之享元模式
“使用共享以高效地支持大量的细粒度对象”(摘自《游戏编程模式》第三章)从这一句话可以看出,享元模式重要的目的是关于代码的高效性。而一般提升效率的本质则是减小计算量、工作量。例如:LOD:层次细节技术,它降低远处的渲染质量来减小计算机的工作量比较的二分法:利用规律减少比较次数理解上述问题是比较简单的。而享元模式,它减小计算量的手段是:通过对一个集合的公共部分的抽离,让公共部分共...原创 2019-03-19 13:46:15 · 323 阅读 · 0 评论 -
游戏编程模式之命令模式
命令就是一个对象化(实例化)的方法调用(摘自《游戏编程模式》)上述引用是将命令模式概念进行精简的版本,未精简的概念为:命令模式就是"将一个请求(request)封装成一个对象,从而允许你使用不同的请求、队列或日志将客户端参数化,同时支持请求操作的撤销与恢复" 。(你大概也不想理解这一句)这两个概念与“回调(callback)”具有共性。回调函数就是一个通过函数指针调用的函数。如果...原创 2019-03-19 13:44:19 · 396 阅读 · 0 评论 -
游戏编程模式之原型模式
“使用特定原型实例来创建特定种类的对象,并通过拷贝原型来创建新的对象”(摘自《游戏编程模式》)原型:同属于某一父类的各种类拷贝:同一种类或统一父类的子类实例的初始化可以利用统一的生成器来生成实例实例:生成敌人在例子中,我们需要在游戏中生成三种敌人。他们分别书幽灵、恶魔、术士。最白痴的做法:平行化的类层次结构class Monster{ //……};//三类恶魔...原创 2019-03-21 14:56:55 · 232 阅读 · 0 评论 -
游戏编程模式之观察者模式
“在对象间定义一种一对多的依赖关系,以便当某对象的状态改变时,与它存在依赖关系的所有对象都能收到通知并自动进行更新”(摘自《游戏编程模式》)MVC的底层就是观察者模式观察者模式理解图两者是m : n的关系。被观察者可以被多个观察监视,一个观察者可以观察多个被观察者观察者模式的意义是:把游戏逻辑从分散在各个主干代码上聚起来。实现方法主要思想是:利用关键字作为事件标志建立一个消...原创 2019-03-20 10:56:14 · 263 阅读 · 0 评论