博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
常见代码框架
阅读量:5285 次
发布时间:2019-06-14

本文共 1884 字,大约阅读时间需要 6 分钟。

使用框架开发游戏
 
优点:耦合性低,重用性高,部署快,可维护性高,方便管理。提高开发效率,降低开发难度
缺点:增加了系统结构和实现的复杂性,需要额外花费精力维护,不适合小型程序,易影响运行效率
 
常见框架
MVC 
  • 表现层(View):游戏画面。UI
  • 逻辑层(Controller):数据接口,操作控制,AI
  • 数据层(Model):数据保存,图片、声音等资源
 
我的SFramework中,View层是单独的,Model我放在基类中,Controller则在派生类,实现了MVC的分离(如果要重构的话我可能会用组合代替继承)
举例: PlayerHUD+PlayerCtrl(PlayerYuka)+IPlayer
 
注意图中的调用关系
MVC
优点:实现了层次化设计,是一个基础常用的框架
缺点:MVC如果没有用好,容易出现某一层过重的现象(如View)。MVC更适合横向铺量的项目。游戏(非UI部分)则不太合适。
 
MVVM
MVVM 模式将MVP中的 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致。
MVP中,View 与 Model 不发生联系,都通过 Presenter 传递。
唯一的区别是,它采用双向绑定(data-binding):View的变动,自动反映在 ViewModel
 
SFramework中,View不能直接修改Model,他们之间通过事件通信
 
uFrame&MVVM
uFrame框架模仿了MVVM这种架构模式(事实上并不包含Model部分,且多出了Controller部分)
在uFrame中,使用Element这个概念将业务分拆成三部分:
  • ViewModel:保存游戏中对象的数据结构,例如血量、经验、金钱等等。
  • Controller:处理游戏业务逻辑。例如加血、减血之类的。
  • View:游戏世界中可以见的对象,和ViewModel绑定,以在游戏中进行展现。
 
uFrame是可视化的,功能似乎方便实用,但是由于收费,我没有深入过,不便过多评价
 
PureMVC
pureMVC框架引入了多种设计模式、消息机制(使用观察者模式,发布/订阅模式)来解耦各个模块
 
我曾使用过PureMVC框架开发过一个demo,它通过ApplicationFacade,Mediator,Proxy,Command架设项目,由SendNotification()进行交互
 
优点:强解耦,实现了MVC高度分离
缺点:增加代码量,降低执行效率,函数调用层次较深,容易找不到消息发送源。Facade作为单例接口,本应管理MVC,Model、View、Controller却提供了 getInstance()方法,让人奇怪
 
MVCS
框架与架构
 
StrangeIOC支持依赖注入(即控制反转(Inversion of Control,缩写为IoC)),可以有效降低耦合度
但是IOC复杂而缓慢,而且是基于Mono的,所以我没有选用
 
ECS
Entity Component System 
Unity本身的组件开发就是ECS框架,ECS很适合游戏开发,在游戏引擎中比较常见,谷歌曾在Github上发布了一个名叫Entitas的ECS框架,下面我们就来介绍
 
  • Entity就是只有数据的GameObject对象,不包括方法
  • 每一个Entity拥有Component组件,负责Entity数据处理
  • Group是拥有相同Component的Entity集合
  • Context就是创建销毁Entity的工厂
  • Collector收集器提供了简单的方法来处理Group中Entity变化的反应。
 
ECS的教程现在还比较少,详细的我也不方便介绍了,感兴趣的可以在这些框架中选一个深入
 
其他
TRAP框架
TRAP是一个学长制作的单机游戏,他在这个游戏中使用了自己原创的框架,SFramework也从中参考了不少设计思路。TRAP有分UI部分和游戏部分,封装了Unity事件和输入控制,使用单例、Manager和NotificationCenter进行消息传输,不过目前未开源
 
GameFramework
基于 Unity 5.3+ 引擎的游戏框架,国人原创,开源
详情可以去官网查看 
 
SFramework
Sunset Game 制作组自主设计研发的一款Unity通用游戏框架,设计思想类似MVC+ECS。
 
还有更多优秀框架可以在GitHub中找到~
 

转载于:https://www.cnblogs.com/wenfei199008/p/10656975.html

你可能感兴趣的文章
NHibernate系列学习(三)-条件查询Criteria
查看>>
C++11并发——多线程std::mutex (二)
查看>>
分享:模型驱动开发的小尝试有所收获
查看>>
谁动了我的cpu——oprofile使用札记
查看>>
RPC框架实现 - 通信协议篇
查看>>
Fiddler基础教程
查看>>
SaltStack salt 命令
查看>>
HDU 2095
查看>>
Android Api Guid 之App Components 笔记
查看>>
vue中轮播图的实现
查看>>
给自己的话
查看>>
linuxmint 15/ ubuntu 13.04 install OpenERP client 6.0.4
查看>>
SQL中如何避免书签查找
查看>>
图论算法之拓扑排序的简单代码
查看>>
hibernate--关联映射(一对多)
查看>>
Anaconda 安装redis-py模块操作redis数据库
查看>>
3.24上午 写作P62政府类词汇
查看>>
6.2下午 阅读视频 口语习语完
查看>>
vue router
查看>>
第三次实训作业
查看>>