
游戏设计模式
两水先木示
有时候,你不知不觉就完成了一个BUG!
展开
-
【设计模式游戏完美开发】策略模式
GoF定义:“定义一组算法,并封装每个算法,让它们可以彼此交换使用。策略模式让这些算法在客户端使用它们时能更加独立”ICharacterArr:角色属性基类(接口),拥有一个策略接口对象(抽象对象),其中InitArr初始化属性会使用这个策略对象来进行初始化属性,GetPower同理。IStragety:策略基类(接口),拥有一个角色属性基类对象,通过它来进行初始化属性算法和进行Get...原创 2019-06-18 22:34:20 · 410 阅读 · 0 评论 -
【设计模式游戏完美开发】中介者
GoF定义:“定义一个接口用来封装一群对象的互动行为,中介者通过移除对象之间的引用,来减少它们之间的耦合度,并且能改变它们之间的互动独立性”。在外观模式下,已经将需要使用不同子系统功能来做出一个更强大的功能这样的事情做好了,即一个外观类有5个子系统A,B,C,D,E,外观类有2个方法Method1和Method2Method1执行A,B,C的方法来进行实现功能Method2执...原创 2019-06-17 23:09:26 · 211 阅读 · 0 评论 -
【设计模式游戏完美开发】单例模式
你真的了解单例模式吗?单例模式在GoF的定义:“确认类只有一个对象,并提供一个全局的方法来获取这个对象”单例的目的:全局唯一 、方便获取全局唯一:可以限制允许创建单例类对象的范围,如将单例类的构造函数改为私有的,这样创建范围就被约束在单例类内部进行。方便获取:将单例类对象作为静态对象存在于项目中,这样在项目中同命名空间下的任意一个地方都可以获取到它。但是,单例模式要尽量少...原创 2019-06-17 22:44:57 · 326 阅读 · 0 评论 -
【设计模式游戏完美开发】外观模式
外观模式在GoF的解释是:“为子系统定义一组统一的接口,这个高级的接口会让子系统更容易被使用”以汽车为例,汽车内部有各种各样的子系统,但是开车的人不需要理解这些,只需要知道怎么用方向盘、踏板、仪表盘来进行操控,方向盘、踏板、仪表盘就是所谓的高级接口,隔离了复杂的子系统。假设一个项目有5个子系统,每个系统都有它独特的功能,如果有出现子系统之间需要配合才可以实现的功能,那么此时就可以构造一...原创 2019-06-17 22:33:41 · 317 阅读 · 0 评论 -
【设计模式游戏完美开发】状态模式
Context (状态拥有者):拥有一个IState状态对象,由外部调用SetState方法进行赋值;Update方法会调用IState对象的Update方法IState(状态接口):拥有一个Context状态拥有者对象,Update方法和ChangeState(IState)方法,其中,Update方法是执行状态逻辑的,ChangeState(IState)方法是转换当前状态为参数IS...原创 2019-06-17 22:18:53 · 401 阅读 · 0 评论 -
【设计模式与游戏完美开发】抽象工厂
它就是工厂模式的升级版,可见上图;它与工厂模式的区别就是抽象化了,而工厂模式的工厂是具体的,例如:将上面的深圳工厂拆出来,我不需要其他城市的工厂了(例如都倒闭啦~哈哈),就变成工厂模式了。。而且这种工厂模式正是我介绍的工厂模式第二种形式的实现方法的小改动一下,原本是一个接口【创建产品】,外部还需要掺入一个产品枚举参数,进行区分创建的是哪个产品,而上图的工厂模式是将这个枚举去掉,...原创 2019-06-21 21:21:51 · 226 阅读 · 0 评论 -
【设计模式与游戏完美开发】代理模式
代理模式和装饰器十分类似,以如下图解释说明区别。装饰者在之前介绍装饰模式的时候就说明了它是在被装饰者的功能基础上,附加新的功能,而且被装饰者的接口必定会被调用的情况下才选用装饰模式来解决问题;而代理者是先判断是否需要执行被代理者的功能,如果不需要执行被代理者功能,那么就执行代理者自身的功能,如果需要,那就执行被代理者的功能。仔细地阅读上面两句话可以发现细微的差别,虽然看上...原创 2019-06-21 21:02:09 · 664 阅读 · 0 评论 -
【设计模式与游戏完美开发】适配器模式
一般运用在将第三方库的接口转为己方类接口,避免出现第三方库更新时或己方要更换库时出现大改动。例如:math库封装成 MyMath类(己方),MyMath类其中一个接口如下:void Abs(float num){math.Abs(num) ;}其他接口类似地进行如上操作的调用,当第三方库(math)改为别的第三方库时,我们只需改动己方类(MyMath)即可。第...原创 2019-06-21 20:33:56 · 376 阅读 · 0 评论 -
【设计模式与游戏完美开发】装饰模式
与访问者模式类似的做法,区别是访问者的访问人数和类型 以及 要对被访问者做的事情 与装饰者不同。相同点:它们都拥有第三方(被访问者/被装饰者)通过聚合形式参与到(访问者/装饰者)进来不同点:1. 被装饰者只允许一个进入装饰者类,而被访问者可以有多个进入访问者类;2. 装饰者与被装饰者的基类相同(同一类群),而访问者与被访问者的基类不相同(非同一类群)3. 装饰者必定会调用被装饰...原创 2019-06-21 09:30:07 · 441 阅读 · 0 评论 -
【设计模式与游戏完美开发】访问者模式
GoF:“定义一个能够在一个对象结构中对于所有元素执行的操作。访问者让你可以定义一个新的操作,而不必更改到被操作元素的类接口”(一般我打出GoF就说明我不是很理解)简单来说,访问者是一个考虑了所有“被访问者”可能会需要的接口(功能),被访问者需要放入访问者的它所需的接口中进行处理处理的问题如下:假设有Enemy敌人类和 Solider士兵类它们均继承于Character基类。现...原创 2019-06-20 23:52:22 · 421 阅读 · 1 评论 -
【设计模式与游戏完美开发】备忘录模式
为每一个系统或功能或关卡等信息分门别类地制作一个存档类进行专门的【存档功能】。如:成就系统的存档需记录当前已经完成的成就ID,那就需要对应地建立成就存档类AchievementSaveData伪代码class AchievementDataBook{ public List<int> achievementIdList;// 存/取的成就ID列表 public...原创 2019-06-20 23:07:49 · 277 阅读 · 0 评论 -
【设计模式与游戏完美开发 】观察者模式
事件系统就是典型的观察者模式,不过C#有委托会相对简单一点,而如果没有委托,每一个事件都会要求生成一个类对象来进行保存事件响应方法。EventSystem事件系统 ,Dictionary<EventName, List<Action<int>> > eventDict;内有void AddListener(EventName, Action<i...原创 2019-06-20 22:53:55 · 382 阅读 · 0 评论 -
【设计模式游戏完美开发】责任链模式
责任链多数用于处理一件事情,例如:解决项目BUG。首先BUG先经手策划处理,如果无法解决则交给程序A处理,如果还无法解决交给程序B处理,直至解决或没人能解决。上述例子就是一个责任链模式的表达形式,责任链就是一个链式的处理逻辑链,每一个结点都是一个具体的处理操作,但是结点自身是抽象的。例如:IHandler是处理接口,内有下一个处理类对象IHandler nextHanlder;以...原创 2019-06-19 23:49:21 · 309 阅读 · 0 评论 -
【设计模式游戏完美开发】命令模式
命令模式:将请求命令封装成对象,管理并执行命令是指一种指示某人做某事的方式,在程序上也十分常见,如:键盘按下会发出某某指令。封装成对象是指封装成类,类要具有命令参数以及执行方法,意味着在命令创建之时就已经决定好要干什么,以及交给谁做。命令参数就是要干什么时需要的材料,执行方法就是执行者和具体的执行逻辑。将命令封装成一个命令类之后,还需要一个命令管理器。命令管理器简单来说就...原创 2019-06-19 23:25:44 · 343 阅读 · 0 评论 -
【设计模式游戏完美开发】享元模式
将公共的、不会改动的属性字段提取出来成为一个静态类,作为对象来保存在原有类中,用聚合方式获取公有对象。例如:一个敌人属性有最大生命值、名称、速度、武器类型、等级,敌人孵化器会产生若干个敌人,每个敌人都需要保存一份数据,而最大生命值、名称、速度属性假设基本不会改动,那么这些不会改动的属性就可以提取出来,作为一个类CommonArr,而敌人类只需拥有这个CommonArr类对象以及武器类型、等...原创 2019-06-19 23:07:23 · 337 阅读 · 0 评论 -
【设计模式游戏完美开发】建造者模式
GoF定义:“将一个复杂对象的构建流程与它的对象表现分离出来,让相同的构建流程可以产生不同的行为表现”。在《设计模式游戏完美开发》一书中的说明,有用到模板方法进行调用建造者的接口(子流程),但是那并不是模板方法,仅仅只是一个十分类似的做法而已,因为模板方法是模板基类调用子类的接口,而不是调用第三方(建造者)的接口,这一点是有区别的回归本章重点,建造者实际上也是和模板模式一样,要从复杂的“算...原创 2019-06-18 23:39:22 · 395 阅读 · 0 评论 -
【设计模式游戏完美开发】工厂模式
一、最简单的工厂模式 其一Factory抽象类:内有一个Create抽象方法,子类FactoryA:实现Create方法生成A产品,子类FactoryB:实现Create方法生成B产品二、最简单的工厂模式 其二Factory抽象类:内有Create(int type)抽象方法,子类FactoryChild:实现Create(int type)方法根据传入的type来对应生成不同的产品。...原创 2019-06-18 23:15:21 · 527 阅读 · 0 评论 -
【设计模式游戏完美开发】模板模式
模板模式不推荐使用,因为难把控,难重构,不易于应对高复杂度的业务流程模板模式是着重于将一些可以划分子流程的逻辑进行优化的一种手段。例如:制作一支铅笔和一支钢笔的流程:可以抽象划分为制作笔芯 +制作外壳 +组装 =一支笔那么制作笔芯、制作外壳、组装这三个就是所谓的“子流程”,这三个子流程是一定会按照这个顺序来进行,此时就能利用模板模式来进行设计。创建一个制作接口...原创 2019-06-18 22:52:09 · 564 阅读 · 0 评论 -
【设计模式游戏完美开发】桥接模式
“将抽象与实现分类,使二者可以独立变化”独立变化是指不破坏开闭原则的“闭”,即对原有代码不做一切改变,但是可以对外开放,也就是可以新增类的方式来扩展,但是又不会影响其他类。桥接模式是一个比较难运用的模式,但是套路还是有的,据我所理解的就是多数用在两个不同群组之间,例如:角色人物类和武器类,角色人物拥有武器Weapon,而Weapon是一个接口,可以有A武器,B武器,C武器等等,这些后...原创 2019-06-17 23:22:02 · 254 阅读 · 0 评论