框架的诞生-零:为什么写框架?

框架的诞生-零:为什么写框架?

    • 题外话
    • 什么是框架?
    • 框架解决什么问题?
    • 为什么写框架?
      • 为了造一个更好更适合的轮子
      • 为了学习和实践
    • 总结
    • 一些游戏客户端框架参考
    • 心里话
    • 框架开发系列文章
    • 最后

题外话

大家好,很高兴,能写这篇文章分享给你们看,也很感谢你们能看我的文章。
如果能和你们交流最好了。
做游戏开发3、4年了,我用过这些,Unity,Cocos2dx,CocosCreator,LayaAir,Egret。

用得最久的是LayaAir,因为工作需要嘛。

但最喜欢的还是CocosCreator,因为社区的小伙伴、引擎组的人都很好很可爱,他们分享的东西都让我受益匪浅。

谢谢~

第一次写文章,如有不当之处请多多见谅。

什么是框架?

我想有的人心里有答案,有的人也有疑问。

这里我提供别人对框架的见解链接:

  • 某乎文章:什么是框架?为什么要使用框架?我告诉你理由哦!

    框架的英文为Framework意思是框架、机制、准则。
    最早是源于建筑行业,是一个框子——指其约束性,也是一个架子——指其支撑性。
    是一个基本概念上的结构,用于去解决或者处理复杂的问题。
    
  • @金戈的回答: 什么是框架?

    框架(Framework)是一个框子——指其约束性,也是一个架子——指其支撑性。
    IT语境中的框架,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构。
    在此结构上可以根据具体问题扩展、安插更多的组成部分,从而更迅速和方便地构建完整的解决问题的方案。
    

我的个人见解:▼

我们的游戏程序都是基于某个平台的,以及可能会使用现成的渲染框架,来实现我们游戏的玩法和业务。同时针对开发和生产环境部署,我们需要一些工具协助。

框架在渲染框架层和业务层之间,封装部分通用能力供业务层使用。起到支撑业务开发的作用。

我的层级图的灵感来自 @白玉无冰 大佬拍的panda大大讲的一页一个PPT:CocosCreator跨平台的引擎架构。▼

对于游戏客户端框架来说

  • 框架具有一定的约束性,指的是,我们需要在一定范围内按照框架作者的设计和规范去使用和扩展。

    比如:

    在CocosCreator框架中。

    • 如果要加载一个资源,那就需要调用cc.assetManager.loadxxx 或者cc.loader.loadxxx,传规定的参数,传错了就可能出问题。

    • 如果需要加载自定义的资源就需要安装assetManager的规范去扩展。具体可参考CocosCreator的文档,不按规范扩展就可能出问题。

  • 框架有部分已经实现的功能,可以直接使用或者稍微扩展就可以用来实现业务逻辑。

  • 大部分游戏客户端框架都包含很多功能模块,甚至不是我们项目需要的。

    比如:

    框架中包含UI管理框架,事件通讯框架,网络模块,等等。

    我们可能只需要事件通讯模块或者UI管理模块,只能手动去剔除不需要的。

  • 框架所能解决的问题有限,有边界。

    比如:

    有的框架只是一个UI管理框架只解决了复杂UI管理的问题

  • 框架可能跟底层强相关。

    比如:一个基于CocosCreator的UI管理模块,里面耦合了CocosCreator的加载,prefab文件,resource文件夹的规范等,可能也耦合了cc.Node的使用等等。

框架解决什么问题?

大家对框架的第一印象可能是

  • 我学不动了学不动了

  • 提高开发效率,快!!!

我个人觉得好坏还得看框架和看个人

  • 好的框架可以统一多个开发人员的编程风格,方便多人协作
  • 好的框架可以让开发人员减少维护程序架构心智负担,减少纠结。
  • 最重要的是可以大大的提高开发效率,大部分时间专心写业务就可以了。

为什么写框架?

为了造一个更好更适合的轮子

有现成的框架为什么不拿来直接用,干嘛自己造轮子浪费时间?

  1. 现成的框架没法满足需求,有无法解决的问题。

  2. 现成的框架和自己的思想不符。

为了学习和实践

写框架可以督促我去学习其他框架是如何设计的,为什么这样设计,能解决什么问题,为什么能解决这些问题。

然后反过来去思考我工作和开发中遇到的问题,我学着去分析,去尝试找解决方案,以及思考如果我写框架怎么解决这些问题。怎么去设计。

写出来的框架很挫怎么办?怕个毛线,继续学习,继续思考,然后解决问题,大不了推翻重写。

写出来的框架不能用在公司的项目中去实践怎么办?这个想法有点危险,哈哈哈,可以自己写项目来验证。不过还有另外一种解决方案。下一篇会讲。

写框架是一场历练,督促着我去学习和沉淀所学,打磨我的知识体系,让它更加完善。

总结

  • 什么是框架?
    是游戏程序的一部分,是支撑游戏业务逻辑的架子,但也是具有一定约束的框框。

  • 框架解决什么问题?

    • 可以统一多开发人员的风格(框架的风格)

    • 可以让开发人员减少维护程序架构的心智负担,减少纠结(按照框架的思想来就行)

    • 可以大大提高开发效率,大部分时间专心写业务逻辑就可以了

  • 为什么写框架?

    • 去学习其他框架怎么设计,怎么解决它们面对的问题。

    • 解决自己工作和开发中遇到的问题

    • 积累和沉淀自己的知识

一些游戏客户端框架参考

  • CatLib 一个Unity的渐进式框架(ps:我的框架灵感之一)
  • U3d网络游戏架构设计 一个大佬的GitChat专栏,需要订阅
  • 腾讯学院的手游核心技术实战 这是腾讯学院的一个贪吃蛇大作战的一个游戏开发课程,讲到了如何设计和实现基于Unity的游戏框架
  • GameFramework 基于Unity的一个完善的框架
  • QFramework 基于Unity的一个完善且扩展性非常强的框架,而且作者有很多关于框架设计的理念,非常棒
  • UNITE -Unity项目架构设计与开发管理
    • 文章:Unity项目架构设计与开发管理
  • 【ituuz分享-框架】lightMVC:轻量级游戏开发框架(for cocos creator)
  • GameplayFrameWork for CococsCreator
  • 其他的还有很多,论坛搜 "框架"即可

心里话

我想和优秀的小伙伴一起开发好玩的游戏

我希望能通过我做的游戏,我的能力获得用于生活和学习的报酬。

我也希望

有人能从我的游戏中获得快乐,或者有所收获

也希望

有人能因我的分享而有所收获

然后我能说一句

谢谢你玩我的游戏

谢谢你信任我

谢谢你用我的框架

谢谢大家阅读我的文章,希望大家能有所收获。

框架开发系列文章

  • 框架的诞生-零:为什么写框架?

  • 框架的诞生-一:我想要的框架

  • 打破CocosCreator3d不能使用npm包的魔咒!!!

  • 框架的诞生-二:定位

  • 不只是 UI 管理:通用显示管理

  • 让 fairygui 更好用的插件

  • 满足多种需求的通用对象池

  • 构建游戏/应用的神器:broadcast

  • 满足所有自定义需求的通用 socket 网络模块

  • 业务开发总结之状态管理

  • 待续。。。

最后

欢迎关注我的公众号,更多内容持续更新

公众号搜索:玩转游戏开发

或扫码:img

QQ 群: 1103157878

博客主页: https://ailhc.github.io/

掘金: https://juejin.cn/user/3069492195769469

github: https://github.com/AILHC

热门文章

暂无图片
编程学习 ·

Python/PTA--第2章 分段计算居民水费 (10分)

第2章-13 分段计算居民水费 (10分) 为鼓励居民节约用水,自来水公司采取按用水量阶梯式计价的办法,居民应交水费y(元)与月用水量x(吨)相关:当x不超过15吨时,y4x/3;超过后…
暂无图片
编程学习 ·

那些貌似真诚的人

是不是经常遇到这种人,大家的评价都是他很真诚,人也很简单,事情好,事情往往会有利于他,而且他过的很快乐。 残酷的现实是没有简单的快乐,只要是丰富的快乐,他就不会简单。一个人貌似真诚不见得…
暂无图片
编程学习 ·

JetBrains软件怎么设置中文?值得一看!

JetBrains是一家捷克的软件开发公司,此公司最为人所熟知的产品是Java编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA。jetbrains全家桶基本都是英文的,有的朋友使用起来很不方便,那么jetbrains全家桶怎么汉化呢?…
暂无图片
编程学习 ·

ElasticSearch应用篇-搜索增强

ES有一些非常强大的能力,例如:根据用户搜索的时候,也可以搜索同义词,也可以基于语义进行分词,返回最最适合的结果,ElasticSearch是如何实现这种能力的呢? 一、ES搜索与Analyzer 1.ES搜索过程 …
暂无图片
编程学习 ·

7、外观模式

外观模式 文章目录外观模式概述结构结构实现练习源代码抽象外观类案例外观模式优/缺点与适用环境优点缺点适用环境概述 外观模式:为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 外观模式…
暂无图片
编程学习 ·

动态规划之股票问题123

问题描述: 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 来源&a…
暂无图片
编程学习 ·

北邮CSAPP第三章之数据格式与程序编码

程序的机器级表示 本章学习内容:汇编代码 高级语言屏蔽了程序的机器级实现。 用高级语言编写的程序可以在不同的机器上运行,汇编代码则于特定机器密切相关 学习汇编代码能理解编译器优化能力,并分析代码中隐含的低效率 此外,高…
暂无图片
编程学习 ·

安装gradle

安装gradle1、下载二进制包解压2、配置环境变量3、验证,如下成功4、配置Gradle仓库源5、idea配置1、下载二进制包解压 2、配置环境变量 3、验证,如下成功 4、配置Gradle仓库源 在Gradle安装目录下的 init.d 文件夹下,新建一个 init.gradle …
暂无图片
编程学习 ·

CodeGen标记循环

CodeGen标记循环 标记循环是一个模板文件构造&#xff0c;它允许您迭代CodeGen拥有的标记信息的集合。为了使用标记循环&#xff0c;必须基于至少定义了一个字段标记的存储库结构生成代码。 标记循环由一对匹配的<Tag_LOOP>和</Tag_LOOP>标记分隔&#xff0c;它们围…
暂无图片
编程学习 ·

CodeGen按钮循环

CodeGen按钮循环 按钮循环是一个模板文件构造&#xff0c;它允许您迭代CodeGen拥有的按钮信息集合。 在按钮循环中处理的按钮的定义可以来自两个位置之一。 如果基于UI工具箱输入窗口定义进行处理&#xff0c;则默认情况下&#xff0c;按钮集合由该输入窗口定义中的按钮确定。否…
暂无图片
编程学习 ·

CodeGen准备存储库

CodeGen准备存储库 CodeGen几乎总是与提供用于生成源文件的元数据的存储库结构一起使用&#xff0c;并且许多令牌需要使用存储库结构。 基本要求是有一个结构定义&#xff0c;并且该结构定义包含一个或多个字段定义。有些标记还要求定义键&#xff0c;有些则需要具有结构赋值的…
暂无图片
编程学习 ·

2020年PMP笔记归纳第六章项目进度管理

学习目标&#xff1a; 掌握第六章项目进度管理 学习内容&#xff1a; 内容章节 6.1 规划进度管理 6.2 定义活动 6.3 排列活动顺序 6.4 估算活动持续时间 6.5 制定进度计划 6.6 控制进度 第六章PMBOK概述中的重点内容 具有未完成项的迭代型进度计划。基于适应型生命周期的滚动…
暂无图片
编程学习 ·

无人机项目跟踪记录--失败

查看了源代码&#xff0c;发现无法往下进行了&#xff0c;原因如下&#xff1a; 1、这个第二代机移植了cleanfly开源的源码程序&#xff0c;似乎这个开发板的目的是为了学习cleanfly源码的&#xff0c;而不是为了初步了解无人机的&#xff0c;已经是个很高阶段了&#xff0c;超…
暂无图片
编程学习 ·

Python3正则表达式之:(?(id/name)yes-pattern|no-

Python3正则表达式之&#xff1a;(?(id/name)yes-pattern|no-pattern)条件性匹配 1. 用途 (?(id/name)yes-pattern|no-pattern)的作用是&#xff1a; 对于给出的id或者name&#xff0c;先尝试去匹配 yes-pattern部分的内容&#xff1b; 如果id或name条件不满足&#xff0…
暂无图片
编程学习 ·

socket简单使用(Android、c、QT不同场景下使用)

一&#xff1a;Socket使用场景&#xff1a; socket做网络通信使用&#xff0c;例如游戏中的聊天&#xff0c;IM聊天&#xff08;QQ微信等社交&#xff09;&#xff0c;这些是大型的场景&#xff1b;还有一些是次一等的场景&#xff0c;例如一套本地使用的软件&#xff0c;需要…
暂无图片
编程学习 ·

网络信号与数制转换

文章目录信号与传输介质信号双绞线双绞线的连接规范光纤概述光纤的分类光纤接口无线传输介质无线电波微波天线计算机的数质信号与传输介质 信号 什么是信号&#xff1a;信息&#xff0c;数据&#xff0c;信号 信号的分类&#xff1a;①模拟信号②数字信号 模拟与数字的区别&a…
暂无图片
编程学习 ·

樊昌信版通信原理期末复习第一章绪论

第1章 绪论 一、知识点梳理 1、通信的目的&#xff1a;传递消息中所包含的信息。 2、消息&#xff1a;是物质或精神状态的一种反映。 3、信息&#xff1a;是消息中包含的有效内容。 4、通信系统的一般模型 信源输入变换器&#xff1a;将非电物理量变成电信号。 发送设备&…