cocos2dx n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
基于 cocos2dx 的游戏框架设计 PowerPoint Presentation
Download Presentation
基于 cocos2dx 的游戏框架设计

Loading in 2 Seconds...

play fullscreen
1 / 32

基于 cocos2dx 的游戏框架设计 - PowerPoint PPT Presentation


  • 143 Views
  • Uploaded on

基于 cocos2dx 的游戏框架设计. 人人游戏 - 李成(关中刀客) guanzhongdaoke@gmail.com 2012-03-10. WHY THIS PPT. cocos2dx 开发经验分享 虽有大量的技术点分享,但无大型项目整体的设计经验分享 如何充分结合 IOS 平台的诸多特性 避免项目开发中后期 , 面临 难以拓展,难以复用的问题 传统游戏开发经验分享 传统游戏开发技术已经很成熟,完全值得学习和借鉴 交流探讨 抛砖引玉,希望大家将自己的开发经验分享出来 众人拾柴火焰高. LET US GO. 大楼倒塌 VS 游戏崩溃. 灾难之后 …….

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '基于 cocos2dx 的游戏框架设计' - jessica-blanchard


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
cocos2dx

基于cocos2dx的游戏框架设计

人人游戏-李成(关中刀客)

guanzhongdaoke@gmail.com

2012-03-10

why this ppt
WHY THIS PPT
  • cocos2dx开发经验分享
    • 虽有大量的技术点分享,但无大型项目整体的设计经验分享
    • 如何充分结合IOS平台的诸多特性
    • 避免项目开发中后期,面临难以拓展,难以复用的问题
  • 传统游戏开发经验分享
    • 传统游戏开发技术已经很成熟,完全值得学习和借鉴
  • 交流探讨
    • 抛砖引玉,希望大家将自己的开发经验分享出来
    • 众人拾柴火焰高
slide6
游戏开发 VS 盖大楼
  • 前期设计规划很重要
  • 基础设施,基础模块的构建很重要
  • 拓展性&重用性很重要
  • 健壮性&安全性很重要
  • 从基础做起,从细节做起,拒绝豆腐渣工程
cocos2dx1
COCOS2DX引擎简介
  • cocos2d的c++版本,c/c++开发者的福音
  • 支持IOS,Android,Windows等平台,跨平台开发的福音
  • 开源免费,易学易用,庞大的工具链支持
  • 强大的技术支持,活跃的技术社区交流平台
  • 多款线上游戏应用经验
  • 不断的完善和改进,逐渐增加更多的新技术
cocos2dx2
COCOS2DX引擎简介
  • cocos2dx引擎框架图
slide10
IOS应用程序框架
  • UIApplication
  • UIApplication Delegate
  • UIScreen
  • UIWindow
  • UIView
  • UIView Controller
cocos2dx ios1
COCOS2DX&IOS的结合
  • EAGLView
    • 自定义View,继承自UIView,客户端最主要的View界面
    • 捕捉,封装和分发系统TOUCH事件
    • 外层的RootViewController为其控制器,可通过该控制器对EAGLView进行相关控制
    • OpenGL-ES进行渲染更新
  • Accelerometer
    • AccelerometerDispatcher实现了UIAccelerometerDelegate协议,并接收系统Accelerometer事件,然后内部派发处理
    • 依附在CCLayer上
cocos2dx ios2
COCOS2DX&IOS的结合
  • 引擎总体更新流程
    • UIApplication初始化完成之后,通过UIApplication Delegate初始化EAGLView,调用引擎CCApplication的run()接口
    • 调用初始化initInstance()及applicationDidFinishLaunching()接口,调用CCDirectorCaller的startMainLoop()接口
    • 调用系统接口CADisplayLink,注册引擎桢更新处理函数:导演类CCDirector内部的mainLoop()
    • 系统定时回调mainLoop(),进入其内部的drawScene()方法
    • 逻辑更新处理:CCScheduler::Tick()
    • 渲染更新处理
slide17
客户端主模块
  • 单一CCScene
    • 拒绝不必要的花哨表现,简化代码实现
  • 基于帧率的游戏更新处理
    • 游戏主逻辑MINIFinger继承自CCNode,且在初始化Init函数中通过schedule设置游戏逻辑主更新函数Tick(),以此确保每次渲染之前,都会首先进行逻辑更新处理
  • 完全基于帧率的定时器调度
    • 所有的定时器处理,完全依赖于游戏帧率,简单直接
slide18
客户端网络模块
  • 网络模块总体设计图
slide19
客户端网络模块
  • 原生的SOCKET封装
    • 原生的socket编程,简单直接
    • 代码可控,方便定位问题
  • Non-Blocking IO
    • 使用非阻塞式IO模式,无需开辟网络线程
    • 对于TCP来说,单独的连接线程
  • Selector轮训模式
    • 监听所有socket可读,可写和异常的消息
    • 基于事件的回调处理方式
slide20
客户端网络模块
  • TCP & UDP
    • 对于TCP来说,为解决粘包问题,内部使用MemNode来接收数据
    • 对于UDP来说,使用Sequence Number方式处理杂乱,无序包
  • 定制内存池管理器
    • 绝大部分的数据包大小限制于4096bytes
    • free-list内存池技术,NO-MEMCPY;避免频繁new/delete
  • 异或加密方式
    • A^B->C C^B->A
    • 一次异或,明文变密文;二次异或,密文变明文
    • 简单高效,安全性低
slide21
游戏数据层模块
  • 仅指游戏数据层
    • 非IOS常规开发中的数据层,特制游戏内的静态数据层
  • 客户端通常需要大量的静态资源
    • 图片资源&音效资源,窗口布局文件
    • 其他游戏策划数据
  • 拒绝扁平化文件存储
    • 使用SQLite
    • 统一进行读写,提高IO读取效率
  • 统一管理
    • 建立统一的加载,更新和卸载等机制
    • 方便游戏逻辑管理和监控
slide22
游戏数据层模块
  • 数据模块示意图
slide23
游戏UI系统模块
  • UI布局示意图
slide24
游戏UI系统模块
  • 窗口布局组
    • 相同“功能”UI组件合并为一个布局Layout
    • 统一化管理:初始化/加载/更新/事件响应/卸载操作
    • 基于消息事件的处理方式,方便脚本拓展
    • 采用外部配置处理/支持动态化配置
  • 独立的根窗口(UILayer)
    • 系统最底层的窗口层,所有Layout的父窗口
    • 游戏内唯一监听Touch,Accelerometer事件的CCLayer
    • 采集用户输入,统一化处理
  • 脚本拓展
    • Lua语言拓展,将具体逻辑和游戏框架分离,加强健壮性
slide25
游戏UI系统模块
  • UI局部配置化文件示意图
slide26
游戏UI系统模块
  • 关于模态窗口
    • 修改源代码,在CCNode中增加m_bPriorityFromParent;m_nPriority属性,所有添加的UI组件,需要明确设定是否继承父节点的优先级,以此形成一个优先级响应队列,从而实现模态窗口的功能
    • 借助系统UIView,实现单独的View界面,附加在EAGLView之上
  • 相关优化
    • 所有Layout延迟加载
    • 不使用时马上卸载,释放内存
    • 合并需要的图片资源
slide27
游戏音效模块
  • FmodEx
    • 成熟高效,接口简单统一,无需考虑平台化差异
    • 功能强大,支持3D音效,静音,暂定,音量大小等设置
    • 需要购买
  • 引用计数
    • 相同的音效,仅需公用一份资源数据
    • 及时清除不需要的音效资源,减少内存占用
slide28
游戏音效模块
  • 人性化设置
    • 增加人性化的设置面板,提升用户感受
    • 提供动态开启/关闭,设置音量等功能
    • 按照用途,划分音效类型,单独管理
    • 通过Application Delegate,程序获得焦点时播放音效,失去时静音
  • 关于音效资源
    • 音效文件尽可能的小,降低内存占用
slide29
其他模块简介
  • 消息事件管理模块
    • 整个客户端基于消息事件驱动
    • 实现和调度分隔,最大程序降低耦合
  • 调试器管理器模块
    • XCODE自带的调试器工具不够用
    • 需要针对渲染,网络,逻辑数据进行更细化的监控
    • 两者结合,宏观微观,两手一起抓
  • 日志模块
    • 日志分等级,分输入方式,完全可配置
    • 不同类型日志,按照等级分开记录
slide30
还需要什么?
  • 消息推送
    • 借用本地和远程的消息推送机制,提高产品粘合度
    • 借助“社会工程”,调动玩家积极性
  • 移动产品的UI界面设计
    • 移动产品的UI界面尽量简单直接
    • 人性化操作
  • 移动产品的特性
    • 考虑移动产品的特性和人们的使用习惯等,有针对性的设计
thanks
THANKS
  • 感谢cocos2dx引擎团队的大力支持
  • 感谢本次大会的支持
  • Thanks All