手游client思考框架

手游新公司新项目client我不太同意框架。虽然我也终于让步,当他居然问老板,使这个幼稚的行为而悔恨。

然而,就在最近我写了一些代码视图,我更坚定了自己的想法和思想。和思路不一定适合其它人,所以我并不会说其它人的思路或者习惯不正确或者不好,仅仅要能用清晰的思路写出清晰的代码就好了。

一、3D、Unity意味着更长的项目周期?

非常多人都会有这种看法。由于Unity比cocos2d-x功能很多其它。坑很多其它,所以会加长项目的开发周期。也有一些技术向的人会觉得,Unity优化不到位,所以性能上还做不了大的mmo。甚至在性能上还不如OGRE。 我无法用井底之蛙来形容这些人。由于这些人都是项目负责人、技术总监、资深主程。可是在我看来项目开发的进度是跟团队水平有关的,跟引擎无关。

如今非常多线上的成功的3D MMO手游也证明了Unity的性能。

根本不存在“做不了”这种说法,甚至“坑太多,非常难做”这种说法都不成立。由于假设它真的那么“坑”的话,就不会有如此多的公司选择Unity,并且成功的开发出千万收入级别的游戏了。

半个月前我还觉得2.5D游戏随便写,由于最早在网龙时使用C3引擎就非常安心、非常顺手。并且我看过C3的源码也不多。几百k而已。只是如今看看cocos2d-x的进度。以及我们自己对3D光效这块儿的移植,cocos2d-x成为一个合格的2.5D游戏引擎还须要至少一年时间。当然技术牛的团队能够自己去搞去优化。但是我实在想不出这么做有多少意义,使用Unity更加安心和方便。比方你不用担心光效的执行效率、引擎的稳定性、模型导入和渲染、模型动画处理、后期特效等等,而这些都是我近期使用cocos2d-x的时候被恶心到的。仅仅能说,我们觉得它非常easy。我们也觉得我们的需求非常easy,但是它就是做的不够好。

二、MVC框架真的适合手游client吗?

应该非常多人都会觉得是的,这是一个经典的解耦合的框架。可是我感觉。框架不是目的,是否真的解耦合也不是目的,是否遵循某种设计模式更加不是目的。高速的构建client功能,而且要让它们清晰、灵活。改动和阅读起来方便,这个才是终于目的。仅仅有代码清晰了,才easy看懂,可以看懂是一切重构和优化的前提,也是改bug的前提。

假设我们为了遵循MVC,去硬靠上去,去纠结哪些东西是“显示逻辑”哪些东西是“业务逻辑”,真心不靠谱。

我们如今的client框架大概是MVP结构,P(我们叫做controller)承载着绝大多数逻辑和功能。整个client就是由一个个的controller组成的。

我们为了遵循这个结构,所以明明一个类、一个函数调用就能够搞定的东西。要切分成几个不同的对象。由于这些对象有父子、兄弟、业务、显示这种关系,所以不能放在一起,对象之间通过一个又一个的事件通知来完毕业务流转。我非常不看好这种代码。仅仅能眼不见为净。

我有点不明确,明明类似《我叫MT》这样简单的卡牌游戏都开发了一年时间。并且开发到后面自己都感觉厚重了,这种MVC有什么存在价值呢?它是适合换皮?还是适合扩展?还是适合删功能?还是适合新人学习?还是适合团队合作?

在我看来。MVC本来就是为软件开发、Web页面开发搞出来的一套东西,最大的功能就是把显示和业务逻辑分离开,这样不管是改动页面内容还是改动后台逻辑都可以互不影响。 而游戏中呢? 界面功能尽管非常多。可是是最不用担心的东西了,绝大多数情况是没有不论什么难度的。 而MVC在非UI部分可以给我们带来多大的便利呢?

我是有用主义,有用主义并非说代码随便写。能完毕策划案就好。有用主义是通过清晰的规则和美丽的封装。让代码变得清晰简洁,让client开发变得有章可循。

大概在一年前。我写过一篇文章,最后有描写叙述我对客户度框架的理解。我非常佩服以前的自己有如此清晰的思路>_<。

“这里也顺便说一下我对游戏client各模块依赖关系的看法,说真心话,游戏client真的是小项目。

那么作为这个小项目。没有必要过分关注耦合,模块化之类的东西。

凡是能让我的代码变得整洁,能让我写代码写的顺手方便的功能就是好功能,即便是约束也乐于遵守。可是假设为了模块化,而让我写代码时写个Impl。再写个provider,那会让人恶心透了,事实证明,有些模块化纯粹是杞人忧天。

有些复用性的想法纯粹是自作多情,比方这样的--你看我的代码模块化的多好,逻辑模块一行代码不用改就能够用到其它项目。

我想说。假设你的游戏赚钱了,我们要再做一个类似的项目。那么我就算把你的ui模块也搬过来又有什么问题。

假设我们要做的是一个新的项目,那么我还是要从那一坨代码中找到我想要的能够复用的东西。那还不如让代码变得简单,直接些,我更easy理解。

作为游戏client,有三个主要模块就足够了。逻辑模块、渲染模块、ui模块,全部跟引擎打交道的地方都停留在渲染模块,渲染模块是对引擎的再封装。即便有少量东西扩散到ui模块也应该仅仅停留在ui控件内部。

逻辑模块仅仅负责而且负责全然的逻辑,这也是为什么逻辑层不能引入ui元素的原因。

逻辑层的东西就是一个一个的管理类。负责游戏的各个业务逻辑。  渲染层是对引擎的再封装,比方封装一个人物渲染类,负责渲染人物(逻辑层里还应该有一个人物类来处理业务逻辑,比方姓名、帮派,这个是组合关系)。

ui层就是一个一个的界面。   渲染层封装好后能够几个月不动。逻辑层和ui层一一相应,完毕一个业务逻辑就是逻辑层加入一个管理类以及ui层加入几个对话框。

他们之间相对独立。有交互就靠上面提到的事件中心来调度。

这样一个事件中心,看着是很easy的东西。可是却是整个client的基础架构,一个好的架构能够让人更加高速的完毕功能(而当架构搭建好后,90%的时间都是在写业务逻辑和界面逻辑),而不好的架构可能让我们写代码又慢,bug又多。”

一切的核心是封装,一切的目的是实现client的逻辑和功能。基于上面提到的框架,我实在想不到会有什么副作用或者不好的地方。

更何况手游项目都不大,假设有人能把一个手游项目写出几十万上百万的代码量。我非常难对此表示认同。

三、基于组合编程、面向对象编程、函数式编程?

我们从教科书中学到了面向对象编程,而后面又出了本经典。说应该用组合来替代继承,再后面又有大神出来说函数式编程多么好。

我们应该怎样设计client的对象呢?  首先函数式编程我是不打算学了。由于我看了几篇文章都没有领会它的精神,但能够肯定的是函数式编程绝对不是面向过程编程。不要对象仅仅写函数就万事大吉的。

这里就要提到一个习惯问题,用自己习惯的写法去做代码封装,而不要用一知半解的概念去东施效颦。

组件式结构必定有其先进和灵活的地方,Unity中的组件思想不管是学起来还是用起来都很方便,大概是我见过的最美丽的实现,这个美丽不光体如今组件本身,还体如今组件间的通信,组件与GameObject的关系等等。

那是不是继承就全然没用了? 当然不是。

即便在Unity中也依旧会有非常多地方须要继承来实现。组件能够描写叙述一个物体的附加能力,而继承则能够描写叙述一个物体是什么,有什么功能。合理的继承能够让代码清晰而精简。 而觉得代码不须要继承,仅仅用组合来描写叙述就是高大上的思想,反而会产生凌乱的代码。

四、怎样从零開始打造一个手游client

原本我对自己缺乏一些自信,觉得自己做一个RPG、ARPG什么的缺乏经验和积累,怀疑自己能不能高速的搭建好整个项目。 可是有的时候不一定是自己的成功能够给自己涨自信,别人的失败一样能够给自己涨自信。

1、技术选型。

这个非常重要。

第一步错了。后面就是在错误的道路上渐行渐远。

假设要做2D游戏那就用cocos2d-x,假设要做3D那就用Unity。本来我是不想提这样的一刀切的观点的,这样显得非常没有水平,由于真正的高手是拿什么都能够做的非常好的。

可是非常多人就是无法正确的选择client引擎,后果就是浪费时间,甚至项目失败。

如今用Unity做的成功的2D游戏也比較多了,所以假设你熟悉Unity的话。那就都用Unity好了,这样能够更好的做团队的技术积累。 而假设没有什么经验的话。那么cocos2d-x+lua是最好的选择。由于简单易上手,招人也easy。 可是要注意,确定了cocos2d-x那就专心做2D的东西,假设美术和策划觉得用3D元素才干表现出一个酷炫的游戏的话,那Unity是不二选择。

2、领会选择的引擎的开发流程和开发思路。

比方cocos2d-x中怎样处理人物移动、技能播放、UI。Unity中怎样处理人物攻击判定、物理效果、组件通信等等。 我刚開始接触Unity的时候花了非常长时间去思考这些问题,尽管浪费了一些时间,可是换来的是清晰的思路,当明确了这些问题。才干写出Unity Style的代码。 假设游戏中的基础功能都可以实现出来。那么一个Demo就成型了。

3、游戏最核心的玩法。

大多数情况下就是战斗系统。 这里可能涉及到一些相对困难的东西。比方ARPG中的技能系统设计、三消游戏中的转珠算法、卡牌游戏中的战斗流程设计等等。 这个花一个月甚至更长的时间来做都是合情合理的。 基本上这个东西实现完了,游戏中最重头的部分就结束了,剩下的就是纯逻辑的功能了。而纯逻辑功能尽管耗时间,可是没有什么难度,并且能够靠添人来加快开发进度。

4、数据结构设计。

这个主要是数值策划相关的东西。比方人物有哪些属性,装备有哪些属性。用什么结构来存储人物信息,装备信息存放在哪里。程序的主要工作就是理清楚这些属性该怎样配置,怎样载入、怎样同步。

5、网络通信和UI模块设计。尽管这两个是全然不同的东西,可是解决思路是一样的。选择一个技术方案(比方protobuf,cocostudio)。进行合理的封装,使得写这些功能独立而简单。 这个是后面开发的重头内容,client一大半代码都是在处理网络消息和ui逻辑。

6、详细功能模块的实现。基于上面提到的client架构,“加入一个功能就是加入一个管理类。以及一些列的消息和界面”,我觉得这个找个应届生都应该会做。

ex-2:针对第二点我再多说点。就ARPG的技能系统来说。之前我觉得要实现一个非常美丽的技能系统一定要灵活,一定要可扩充。最好策划须要什么新效果都能够自己来组合设计,不须要程序改一行代码。 这个理论上是可行的,可是也不过理论上,我看了一些Unity线上游戏的代码,他们的技能系统并不灵活,有的甚至非常死,一个技能就是一个类。 可是这个并最好还是碍他们成为出色的ARPG。实现功能是最重要的。只要大的框架有了,细节功能上的设计不是必需追求完美。

五、拥抱策划的变化?

首先,我不觉得游戏功能不停的推翻重做是靠谱的行为。假设是老板的话,那我还能够接受。可是假设是策划的话,那就真该批判了。我自己常开玩笑说我是专业策划。业余爱好是写代码。我觉得策划应该对自己要做什么游戏、游戏有什么噱头、游戏画面和玩法的目标是什么、游戏的终于样子是什么都有一个清醒的认识。假设连终于游戏是什么样子都想象不到的话,那怎样保证设计出的游戏会吸引人。 我想那些成功的游戏在设计之初就依旧确定了游戏的核心,他们肯定会有这种认识:这个游戏就该是这个样子的。这种游戏绝对会火,这么爽的游戏绝对好玩。

其次,即便我们须要应对重复无常的策划,那么我上面提出的框架也一样能够方便的进行改动。

不一定须要严格的功能模块切分,而当我们接手别人维护的代码的时候,很多其它的时候是理解策划案功能。而觉得通过严格的模块划分和模块间事件通信来完毕解耦合就能够更加方便的维护整个项目。在我看来是不切实际的。除非真的个人维护个人的,自己的烂摊子自己最熟悉,否则真要查起bug来。说不定更加痛苦。

最后,当我们需要改变时,皮肤,同样可以轻松搞定。

我们是非常灵活的独立和明确的。至少渲染层封装是绝对有能力复。其中的逻辑是同层的用途很广,再假设某些功能无法用语言,然后相应的ui层也将不需要。



时间: 2025-01-03 01:01:34

手游client思考框架的相关文章

手游客户端框架的思考

新的公司新项目的手游客户端框架我并不是十分赞同,虽然最终我妥协了,并且为自己竟然做出质疑上司这样的幼稚行为而后悔.但是就最近写的一些代码来看,我更加坚定我自己的思路和想法.当然我的习惯和思路不一定适合其他人,所以我并不会说其他人的思路或者习惯不对或者不好,只要能用清晰的思路写出清晰的代码就好了. 一.3D.Unity意味着更长的项目周期? 很多人都会有这样的看法,因为Unity比cocos2d-x功能更多,坑更多,所以会加长项目的开发周期.也有一些技术向的人会认为,Unity优化不到位,所以性能

着手一个手游项目的思考

虽然个人阅历有限,但也对端游,页游,手游都有涉及. 目前正值筹备新项目的时候,又面临着技术选型等方面的问题.记录在此,以整理思绪 技术选型 1.前后端的技术选择 前端我觉得要按以下方向来  平台-〉3Dor2D->游戏类型 不同的引擎总是有自己擅长的一面,而强扭的瓜总不可能太甜. 所以,我一向认为,适合的引擎能够更容易做事情. 同时,我也不建议自己撸引擎. 要撸,就自己撸着玩,不要把自己的坑,带到项目中来. 端游,页游就不讨论了,目前很少有公司新开这类型的项目. 我们来说说手游. 对于手游的选择

[游戏开发]关于手游客户端网络带宽压力的一点思考

## 关于手游客户端网络压力的一些思考 ### 场景背景 毫无疑问,策划都喜欢多人同屏战斗.什么万人大地图,这肯定是策划的最爱了.可是对于游戏来说,这并不是什么非常好的设计.即使解决了服务端计算的性能压力,客户端显示的性能压力.万万没想到的是我们游戏在客户端网络带宽上面遇到了压力. 假设1000人同屏,那么要同时同步1000个人的位置,移动方向,速度,释放技能,伤害,血量,buff等信息.这n*2的网络带宽复杂度,对于服务端来说,其实只要申请大些的带宽,买贵点其实就可以解决了.但是对于时常处于不

Cocos2d-x 3.X手游开发实例详解

Cocos2d-x 3.X手游开发实例详解(最新最简Cocos2d-x手机游戏开发学习方法,以热门游戏2048.卡牌为例,完整再现手游的开发过程,实例丰富,代码完备,Cocos2d-x作者之一林顺和泰然网创始人杨雍力荐) 于浩洋 著   ISBN 978-7-121-23998-4 2014年9月出版 定价:59.00元 356页 16开 编辑推荐 以Cocos2d-x V3.0为框架全面讲解手游开发的知识和方法 以热门游戏2048.卡牌为例,完整再现手游的开发过程 Cocos2d-x作者之一林

腾讯手游如何提早揭露游戏外挂风险?

目前腾讯SR手游安全测试限期开放免费专家预约!点击链接:http://wetest.qq.com/product/sr立即预约! 作者:sheldon,腾讯高级安全工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. WeTest导读 随着大量外挂.辅助.工作室等非法盈利团队借由移动游戏产业迅猛发展的东风趁虚而入,对游戏开发商和玩家来说都造成了不小的伤害,安全问题成为手游发展不容忽视的前提.本文告诉你如何从技术的角度来提前曝光这些安全问题和外挂风险. 安全无小事-安全测试开展思

手游服务器开发技术详解

从事游戏服务器开发差不多两年时间,两年间参与了不少项目,学到了很多游戏服务器开发技术,参与过几个不同架构的服务器开发,就随便聊聊游戏服务器开发需要的技术.(以下所指游戏服务器更偏向于手游,因为我对端游和页游开发接触并不多) 一.聊聊服务器开发有哪些东西要考虑. 1.开发语言的选择: 工欲善其事,必先利其器,选择一门适合的开发语法对后期开发有着事半功倍的作用. 业界主要的是c/c++ + Python/lua模式做游戏服务器.c/c++做网络通讯数据传输,python/lua做业务逻辑.这样既保持

手游产品经理初探(八)CasinoStar玩家离开原因分析

通过Delta DNA分析报告,综合我们的游戏进行思考,我总结了几条玩家流失的经验: 1.在有限的前60秒我们没有花足够的精力去吸引玩家.就是说我们要花大量的经历在玩家进入游戏的60秒的体验上(我的澳门要吸取教训).通过Delta DNA对80款游戏的统计有30%的游戏在玩家进入游戏前60秒的表现逊色.在我们的游戏中,60秒内没有给玩家足够的震撼效果,更多的互动展示.在此时间段也不能保证玩家肯定能中Bonus,从而无法体验到Bonus的乐趣. 2.付费点的过早或太过明显占玩家流失原因的70%,从

日新进用户200W+,解密《龙之谷》手游背后的压测故事

2017年3月,腾讯正式于全平台上线了<龙之谷>手游,次日冲到了App Store畅销排行第二的位置,并维持到了现在.上线当日百度指数超过40万,微信游戏平台数据显示预约数780多万,而据内部人员透露当日新进用户200W+,这就是<龙之谷>手游在安卓平台上所取得的成绩. 较高的市场期待让腾讯测试团队对<龙之谷>手游的测试倾尽全力,面对"经典IP"和盛大游戏一贯口碑,腾讯测试团队对游戏服务器进行了严格的压力测试,上线后服务器稳定的表现也证明了测试团队的

类传奇手游简单Demo

这是一年多前自己闲时以Unity2D制作的很粗糙简单的传奇类手游Demo(单机),已很久未作继续开发. 此小Demo初步完成或实现了如下功能(有诸多考虑欠妥甚至不完善之处): 1).图片资源打包方式.譬如角色,其每套动作以TexturePacker打成一张大图,譬如地图,以自定义的格式将原大图切割成等大小的小图(参见后述的地图编辑器): 2).运行时地图图片资源的按需实时加载与释放: 3).角色动作帧的控制及绘制等: 4).游戏逻辑的处理框架(GameMgr及各种Controller和Handl