本篇文章5420字,读完约14分钟

/ br/]基于cocos2d-x的游戏框架设计

科技信息3月31日在北京剧场举行第四届cocoachina开发者大会暨cocos2d-x技术研讨会,所有在线游戏开发工程师李成发表了主题为“基于cocos2d-x的游戏框架设计”的演讲

以下称为实录

主持人:

大家在cocos2d社区共享像今天这样的技术处理方案,但是非常零散。 接下来,我们欢迎全体网络游戏工程师中成。 他演讲的主题是“基于cocos2d-x的游戏框架设计”。

李成:

大家好!

我是来自所有人游戏的李成。 今天演讲的主题是“基于cocos2d-x的游戏框架设计”。 大家有什么好主意可以和所有人的游戏相关同事交流。

为什么要谈这个ppt呢,我的同学在开发cocos2d-x的时候注意到网上有很多例子,但是没有结合技术点做整体的经验设计。 今天我们谈论的是cocos2d-x平台的可移植性,今天我们讨论的是如何与cocos2d-x平台进行比较和游戏类的开发。 希望前期有更好的设计思想,避免在项目中后期遇到难以扩展或难以重复使用的问题。 我个人经历过pc端游戏的开发和web端游戏的开发,所以觉得端内游戏和页游完全可以借鉴以前流传下来的游戏开发经验,应用于移动游戏的开发过程中。

“基于cocos2d”

这个演讲主要分为三个部分。

第一,软件设计不仅与游戏开发有关,也与以前流传下来的建筑业有直接关系。 你可以从两者中汲取一点经验。 建造大楼时,如果大楼被踩了,就和游戏崩溃一样,这两种情况会直接导致什么结果呢? 如果比尔踩了很多人,就必须重写,对于程序员来说,需要重做,其他很多项目的人都在持续加班。 如果你搞垮了游戏,做不了项目,同时没有女朋友,别人就不想和你在一起了。 如果她在的话,你岳母会说你让游戏崩溃了,还什么也做不了。

“基于cocos2d”

简单来说,游戏开发和大楼建设有共同点。 一是前期设计规划非常重要二是基础设施、基础设施建设非常重要三是扩展性、可重用性非常重要四是健壮性安全性非常重要五是从基础入手从细节入手,拒绝豆腐渣工程。

第二,我们来谈谈cocos2d-x和ios平台是如何组合的。

让我们来介绍一下cocos2d-x发动机开发的特点。 由于cocos2d的c+版本现在共享了很多cocos2d的经验,所以如果是cocos2d的c+版本,可以共享以前的经验。 c+版本对像我这样的非出身的人来说可能是福音。 支持ios、安卓、windows等平台,是跨平台开发者的福音。 开源、免费、易学、易用,是巨大的工具链的支持。 早上,刚才很多同学分享了一点工具。 强大的技术支持,活跃的技术社区交流平台,我也有qq群。 那个qq群经常闪烁,所以我工作的时候必须关闭qq。 很多网络游戏的应用经验表明,在一个东西没有被证实的情况下,如果我们盲目地采用一个项目,风险可能会非常大。 cocos2d-x得到了全面和改进,添加了越来越多的新技术,包括与html5的结合。

“基于cocos2d”

介绍cocos2d-x发动机的框架图。 早上,我以为作者会说这个,就加这个。 整个cocos2d-x框架的引擎都有导演,引擎模块的导演有场景的概念,场景可以挂很多层,游戏表现在层上进行,层上还有一些效果,再加上一个效果

简要介绍了ios应用程序的框架。 因为这个ppt主要说明了cocos2d-x和ios框架是如何结合的,所以对ios框架本身来说什么机制很重要。 首先,ios应用程序框架最简单的第一类是六个模块,有五个整体客户端。 在这里,首先进行程序的初始化,有消息的响应、循环。 接下来,delegate向周边扩展,在重要方面用回调的方法告知我们当前的游戏正在加载。 现在游戏进入后台。 这个游戏关闭。 通过该游戏,可以动态及时地获取游戏的运行状态。 接下来是ui屏幕。 画面尺寸可以用这个来取得。 以下是ui窗口、ui视图,这个窗口很直观,一个游戏至少有一个ui窗口,有一个消息响应,ui视图上面配置了消息响应,view上也有控制器,view

“基于cocos2d”

ios这个框架图介绍消息的响应,通过消息发送到ui窗口,上升到各个ui视图,这就是整体框架。 整体的执行周期为初始化、消息注册等事件刚刚开始。 一旦被打断,失去焦点,你会做什么? 如果不删除声音,接电话时声音在播放时就会失去人情味。 退出时如果你的游戏退出,就必须保留资源,清除游戏。 有几种状态。 前台还是后台,必须在这些状态下解决游戏。 否则接电话的时候很奇怪,接电话的时候游戏的声音还在播放。

“基于cocos2d”

接下来介绍cocos2d-x和ios是如何结合的。 因为ios首先是view和ui窗口,所以一个平台需要view,没有view就什么也不能表现。 客户最重要的view界面是捕获、风和逐个发送系统touch。 的rootviewtontroller是其控制器,可以用这个客观器关联eaglview。 opengl-es没有进行渲染更新。

“基于cocos2d”

介绍发动机的整体更新过程。 对于游戏开发者来说,需要说明游戏是如何运行的,各自的运行状态是什么。 通常,ui视图初始化完成后,通过delegate初始化eagl视图时会调用run ( )接口启动cc应用程序。 常规逻辑更新放置在ccdirector内部,在调用后进行熏制更新。 第一步进行逻辑更新,第二步进行客户端渲染更新。

“基于cocos2d”

第三,游戏客户端整体框架篇

简要介绍客户端游戏开发的整体架构。 在本图中,您将在游戏开发体系结构中分层模块化地介绍它们吗? 通常有cocos2d-x引擎库、带音频的播放库。 如果有自己的基本公共库,也可以将其放在上一级。 要使用简单的分析工具,下面是脚本。 客户端的主要模块划分通常需要客户端有这么多模块,例如输入输出模块。 由于游戏的客户端通常面临资源数据、道具数据、音频数据、级别数据等大量数据,因此建议数据层,首先统一管理静态资源(加载、卸载、获取接口等)。 。 另外,作为日志的模块,开发中通常需要记住的日志非常多,如果日志以一种形式记录文件,可能就没有效率了。 如果联机,则不需要大量的数据,因此可以通过日志模块进行分类,并将交换机分开,将日志分为几个。 通常,调试的日志可以放在一个文件中,错误的日志可以放在一个位置,而导致崩溃的日志可以放在一个位置。 这在开发时非常方便,日志不会乱七八糟,记录问题也很方便。 在线时,可以关闭这些日志开关以提高性能。

“基于cocos2d”

互联网层通常相对于互联网,这里采用的原生开发需要原生打包,下面详细说明。 除了这么多基础模块之外,还要做游戏逻辑,到下一层,除了游戏逻辑层,其他模块都可以重用,这就是重用性很高的整体框架设计。

客户端主模块的设计:首先,采用了单一的ccscene。 它可以支持多个scene的跳转,因此拒绝了不必要的华丽表示来简化代码的实现。 基于帧率的游戏更新解决方案,如客户端的minifinger与cc节点集成。 通过初始化init函数中的schedule设置游戏逻辑主更新函数tick ( ),确保每次渲染时首先进行逻辑更新解析。 基于完整帧速率的计时器调度由所有计时器解决,完全依赖于游戏帧速率,简单直接。 整个互联网模块的设计图、互联网层分为udp方法,是互联网编程中有名的设计模式。 大致意思是将不同块的内存节点作为池放入一个队列,这种方式非常迅速简洁。

“基于cocos2d”

本机套接字包,本机套接字编程,简单直接,代码控制方便,存在定位问题。 non-blocking i无o采用了收费插头式io模式,无需打开互联网的线度对象tcp,是简单的连接线程。 选择器轮讲模式,拦截所有解决方案。

tcp udp的具体区别不仅如此,首先对于tcp来说,要处理年糕问题,因为tcp是一种自我榨取的方法,所以存在年糕问题,年糕问题技术代码控制有memnode接收数据的方法。 在udp中,由于其本身是无序的,因此使用sequence number方法解决杂乱无序的包。

“基于cocos2d”

自定义内存池管理器:大部分数据包大小限制在4096字节;自由列表内存池技术;无内存池技术; 不经常新建/删除。

异或方法:网络游戏对服务器有非常强的检查规则,如果有异常服务器,就会被强制断开连接,所以要进行简单的异或加密。 异或和平文变密文二次异或使密文变为明文。

仅限游戏数据层:非ios常规开发中的数据层、特制游戏中的静态数据层。

顾客端一般需要大量的静态资源:图像资源声音资源、窗口布局文件和其他游戏策划数据。

如果要拒绝平面文件存储并将文件放置在一个文件中,则拒绝这样的方法。 建议采用sqlite,移动平台建议采用轻量级数据库。 对静态数据进行批量读写,提高io的读取效率。

统一管理:建立统一的加载、更新和卸载注册制,便于游戏的逻辑管理和监控。 因为我们可以监视所有模块,内存是否过剩,服务器上剩下的内存是否过大,总是内部有监视。

数据模块图:上面每个具体的数据管理器都是从数据库中开发的,上面生成了很多音频、水平、道具等各个数据管理器。

ui布局示意图:在客户端的最下层制作layer,做对重力敏感的事,统一管理并发送这些事。 在根窗口中重新创建游戏界面布局。 例如,现在有游戏布局文件。 这也是一个层,上面有多个子层,有控制区和面板,构成了树形结构,构成了整个游戏的ui布局。

“基于cocos2d”

简要介绍ui系统模块。

窗口组:将相同的功能ui构建集成到一个布局layout中,统一化管理:初始化/加载/更新/事务响应/卸载操作; 基于消息的解决方案,通过易于部署的外部配置来解决和支持动态配置。

独立根窗口( uilayer ) :系统最底层的窗口层次、所有layout的父窗口、游戏中唯一的touch和accelerometer事件的cclayer使用客户输入统一解决。

脚本展开: lua语言展开,分离具体的逻辑和游戏框架,加强健壮性。

ui布局配置文件图:现在开始ui布局。 下面是一个窗口,创建一个层,并在游戏中创建cc层、名称、颜色、位置、大小等事件。 在这个上面建立标签,在上面也可以初始化。 如果编写知识脚本解决的话,这个地方就可以清楚地写出来对什么样的事情执行什么样的解决。

“基于cocos2d”

游戏ui系统模块:对于模式窗口,创建源代码,向ccnode添加优先级概念,然后添加父窗口优先级。 所有添加的ui构建都需要通过决定是否继承父节点的优先级来形成优先级响应队列,实现模式窗口的功能,通过系统uiview实现单独的视图接口,附加到eaglview上。

“基于cocos2d”

优化关联:所有layout都推迟加载,避免在使用时立即卸载、释放内存或整合所需的图像资源。

游戏音频模块:这是一个大家都很热衷的模块,建议使用fmodex。 成熟高效,界面简单统一,不需要考试平台化的差异。 功能强大,支持3d声音,静音、暂停、音量大小等设置完全支持日常音乐开发。 当然需要购买。参考计数:同一声音只需要一个资源数据。 及时清除不必要的音频资源,减少内存消耗。

“基于cocos2d”

人性化设置:添加人性化的设置面板,动态开/关、音量设置等功能,可根据用途划分音频类型并进行单独管理。 当程序获得焦点时,应用程序删除会播放音频,丢失时会静音。 对于音频资源,尽可能缩小音频文件,减少内存占用。

“基于cocos2d”

消息管理模块:实现与客户端整体根据消息驱动的调度的分离,最大程序降低耦合。

调试器管理器模块:缺少xcode附带的调试器工具。需要比较渲染、互联网和逻辑数据,进行更详细的监视。两者结合,宏微观,双手抓在一起。

日志模块:日志分级、输入方法、完全可配置。 按不同种类的日志、等级进行记录。

还需要什么? 消息推送:借用本地和远程消息推送机制,提高产品的年整合度。 利用“社会工程学”调动玩家积极性的社会工程学是什么? 玩杀毒软件和木马的人很了解这种东西。 例如,昨天,我的邮箱地址受到社会工程学的诱惑,说孤独的少女和朋友有链接,用这种挑衅的东西诱惑了你,挂了你几台电脑。 移动产品的ui界面是设计,移动产品的ui界面尽可能简单直接,使操作个性化。 移动产品的特点:考虑移动产品的特点和人们的招聘习性等,有对比性的设计。

“基于cocos2d”

我的演讲到此结束。 谢谢你。

问题:

第一,我刚才提到了很多模块,你想问一下这些模块,或者说这些架构是计划,还是已经实施了? 还是事实中?

李成:

这些模块在移动中已经应用或已经在使用。

问题:

无论是我们的开发端还是移动游戏的开发端,确实都有很多模块。 我个人有个小建议。 如果你自己或者你的企业允许的话,或者在将来的某个时间段允许的话,可以把这些模块贡献给cocos2d-x社区。 这些模块确实是大型游戏和完美的游戏,很多模块都是cocos2d-x社区。 另外,既然已经做了这么多,再加上3d的东西有时间做贡献就更好了。

“基于cocos2d”

我们的开发游戏确实有spf一样的实质性要求比很高,你们也没玩过这样的游戏。 你有经验吗? 我们协商了是用udp还是用tcp。

李成:

是移动还是使用tcp的方法。 以前传来了竞技类游戏,主要数据通过tcp,但不重要的游戏可以用udp的方法做,每隔几帧重复发送一次,再一个tcp的方法,例如每隔20帧重复一次。

问题:

udp需要生成可靠的验证码吗?

李成:

不,只解决杂乱的包就行了。 相对于非常及时的位置移动,差1帧是差1帧,可以直接移动。

问题:

意思是udp和tcp组合使用,udp制作消息来验证这个。

李成:

“是”。

来源:广州新闻直播

标题:“基于cocos2d”

地址:http://www.kdk5.com/gdxw/25311.html