SlideShare ist ein Scribd-Unternehmen logo
1 von 51
为独立工作室构建
 跨平台引擎
——利用开源技术进行快速开发
      封烨
声明


绝无高科技

源自手头项目经验

不同意见
Project OneTap

   2D动作
           轻松风格
一键操作
           简单解迷

   自定义关卡
挑战:关卡设计
工欲善其事



选择1:廉价商业引擎

选择2:开源引擎
廉价商业引擎

           缺点
优点
           离线开发环境
 快速开发环境
           移植(在厂商无支持
 跨平台(在厂商   的情况下)
 支持下)
           无源码
 可承受的授权费
           纯脚本
开源引擎


优点      缺点

 全部源码   无快速开发环境

 跨平台    纯原生代码

 免费     注意授权方式
选择


选择1:廉价商业引擎

选择2:开源引擎

选择3:开源引擎+游戏开发支持层

 Allegro        ✔
Plus层的优势

脚本+原生代码支持

为游戏内容定制的开发环境

玩家可用编辑器

高效率

etc...
Plus层做了什么
游戏对象和组件系统

脚本集成

刚体物理集成

多个小系统
 简单场景管理

 生成即丢弃的Action系统

 脚本Key-Value Dictionary

 etc...
演示

           展示游戏内容和编辑器




3个月后的成果
游戏对象和组件系统
类继承与游戏层开发


游戏层开发 ∈ 游戏程序开发

游戏层开发过程=迭代过程

迭代产生变化

类继承难以响应变化
类继承的困境
类继承的困境
类继承的困境
类继承的困境
类继承的困境
设想:组合
设计模式



Favor object composition over class
inheritance
游戏对象和游戏组件


以组合的方式代替继承

  一个游戏逻辑上的对象

  由多个功能性的组件组合而成
         Component #1
Game       Component #2
Object
             Component #3
游戏对象和游戏组件



运行时添加删除组件

 搭建快速开发环境的关键
脱困:组合
基本组件
位置信息Transform

2D渲染Sprite

位图信息Bitmap Source

用户输入处理Event Receiver

刚体实体Body

刚体碰撞Fixture

粒子喷口Particle Emitter

etc...
用户组件
游戏层需要的任意功能

 自动旋转

 关卡终点

 人物行为

 关卡中的尖刺

 编辑器需要的画线功能

 etc...
演示

背景云
背景云移动
可碰撞前景云
+自动翻转功能
组件间通信


查询接口,直接调用

 破坏组件间独立性,增加耦合度

注册消息,委托系统调用

 无法确定调用先后关系
脚本集成
原生语言困境


编译时间

运行时修改

高级语言特性

“胶水”代码
脱困:2-tiers系统


核心:原生语言

编辑器和游戏层:脚本语言

 Lua

在合适的位置做合适的事
脚本集成相关工作



原生语言和脚本语言通信

 导出工具/库

 脚本语言API
原生和脚本间通信

简单函数/底层系统API

 tolua

 简单、无编译成本

复杂函数

 Lua C API
脚本集成相关工作

序列化

 支持语言高级特性

  引用

  函数对象、闭包

  etc...

 存读盘、编辑器
序列化


Pluto

只需为每个组件编写序列化函数

约1000行Lua代码
预制对象

给对象取“快照”

 参数

 引用

 层级关系

辅助“对象设计”

 关卡编辑器➔对象编辑器
演示

1、运行时修改
2、Prefab
脚本的问题


Debugger

  Coroutine/Fiber

引用泄露

脚本载入器
iPhone版
简单移植

Mac➔iPhone

20 FPS + 崩溃

可能出现问题的地方

  内存/显存需求超限

  脚本效率

  绘制系统效率
内存限制



内存显存共用架构

用户程序可用112M - iPhone 4
解决内存限制

2D游戏-重度使用位图纹理

  预分配位图空间

  22 x 1M x 4 bpp = 88M

Atlas

  将零散的位图拼接成Atlas

  使用自动工具
解决内存限制

内存碎片

  堆分配/释放

  脚本系统

dmalloc

  Drop-in, just works
侦测效率问题


Instruments

  Mac/iPhone

代码嵌入式Profiler
侦测效率问题

嵌入式Profiler发现:

  Draw call数量高

Instruments发现:

  Renderer利用率100%

  Tiler利用率9%
减少绘制调用

桌面平台通用技巧

实现

 收集绘制调用

 排序,位图相同者归簇

 批量绘制相同位图

 目的:减少纹理切换造成的管线停滞
减少绘制调用



优化前

优化后
绘制优化

填充率

 每秒写入帧缓存的纹素数

 桌面平台-重度使用pixel-shader

填充率瓶颈

 减少帧缓存大小,帧率提升
                  ✔
填充率优化

硬件限制-221M/秒

 60 FPS - 3.6M/帧

 30 FPS - 7.2M/帧

2D游戏

 重度使用Alpha-blend

 难以利用Z-buffer
填充率优化


减少重复绘制

 完全不透明物体使用Z-buffer

 修改美术资源,重定义美术规格
演示

填充率效率优化前后对比
Questions?

Weitere ähnliche Inhalte

Andere mochten auch (11)

Profit Finders Booklet
Profit Finders BookletProfit Finders Booklet
Profit Finders Booklet
 
Förhistorisk konst
Förhistorisk konstFörhistorisk konst
Förhistorisk konst
 
Profit Finders Booklet
Profit Finders BookletProfit Finders Booklet
Profit Finders Booklet
 
Diapositivas proyecto
Diapositivas      proyectoDiapositivas      proyecto
Diapositivas proyecto
 
Profit Finders Booklet - 2011
Profit Finders Booklet - 2011Profit Finders Booklet - 2011
Profit Finders Booklet - 2011
 
Diapositivas proyecto
Diapositivas      proyectoDiapositivas      proyecto
Diapositivas proyecto
 
16206brasil
16206brasil16206brasil
16206brasil
 
Diapositivas proyecto
Diapositivas      proyectoDiapositivas      proyecto
Diapositivas proyecto
 
Jarra electrica
Jarra electricaJarra electrica
Jarra electrica
 
BigIntegrate - разрушение мифов по поводу ETL на Hadoop
BigIntegrate - разрушение мифов по поводу ETL на HadoopBigIntegrate - разрушение мифов по поводу ETL на Hadoop
BigIntegrate - разрушение мифов по поводу ETL на Hadoop
 
Informatica partitions
Informatica partitionsInformatica partitions
Informatica partitions
 

Ähnlich wie 为独立工作室构建跨平台引擎

Gentek应用介绍20111123
Gentek应用介绍20111123Gentek应用介绍20111123
Gentek应用介绍20111123
oemgame
 
Vcon90 Final
Vcon90 FinalVcon90 Final
Vcon90 Final
xobo
 
Windows Mobile 6 遊戲開發入門
Windows Mobile 6 遊戲開發入門Windows Mobile 6 遊戲開發入門
Windows Mobile 6 遊戲開發入門
Chui-Wen Chiu
 
深入研究 Windows 系統服務 效能調校與故障排除
深入研究 Windows 系統服務    效能調校與故障排除深入研究 Windows 系統服務    效能調校與故障排除
深入研究 Windows 系統服務 效能調校與故障排除
5045033
 
轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)
FLASH开发者交流会
 
Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發
Chui-Wen Chiu
 
移动互联网上的微视频处理与分发
移动互联网上的微视频处理与分发移动互联网上的微视频处理与分发
移动互联网上的微视频处理与分发
drewz lin
 
微信201204
微信201204微信201204
微信201204
drewz lin
 
微信之道201204
微信之道201204微信之道201204
微信之道201204
shaomeng shi
 

Ähnlich wie 为独立工作室构建跨平台引擎 (20)

Gentek应用介绍20111123
Gentek应用介绍20111123Gentek应用介绍20111123
Gentek应用介绍20111123
 
2018 VLSI/CAD Symposium Tutorial (Aug. 7, 20:00-21:00 Room 3F-VII)
2018 VLSI/CAD Symposium Tutorial (Aug. 7, 20:00-21:00 Room 3F-VII)2018 VLSI/CAD Symposium Tutorial (Aug. 7, 20:00-21:00 Room 3F-VII)
2018 VLSI/CAD Symposium Tutorial (Aug. 7, 20:00-21:00 Room 3F-VII)
 
Vcon90 Final
Vcon90 FinalVcon90 Final
Vcon90 Final
 
Windows Mobile 6 遊戲開發入門
Windows Mobile 6 遊戲開發入門Windows Mobile 6 遊戲開發入門
Windows Mobile 6 遊戲開發入門
 
基于Erlang的
基于Erlang的基于Erlang的
基于Erlang的
 
深入研究 Windows 系統服務 效能調校與故障排除
深入研究 Windows 系統服務    效能調校與故障排除深入研究 Windows 系統服務    效能調校與故障排除
深入研究 Windows 系統服務 效能調校與故障排除
 
Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發
 
轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)
 
Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發
 
移动互联网上的微视频处理与分发
移动互联网上的微视频处理与分发移动互联网上的微视频处理与分发
移动互联网上的微视频处理与分发
 
Qq game后台架构及开发介绍
Qq game后台架构及开发介绍Qq game后台架构及开发介绍
Qq game后台架构及开发介绍
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer Talk
 
Erlang高级原理和应用
Erlang高级原理和应用Erlang高级原理和应用
Erlang高级原理和应用
 
Rsa2012 下一代安全的战略思考-绿盟科技赵粮
Rsa2012 下一代安全的战略思考-绿盟科技赵粮Rsa2012 下一代安全的战略思考-绿盟科技赵粮
Rsa2012 下一代安全的战略思考-绿盟科技赵粮
 
07 funny sango td and cocos2d-x
07   funny sango td and cocos2d-x07   funny sango td and cocos2d-x
07 funny sango td and cocos2d-x
 
软件工程
软件工程软件工程
软件工程
 
微信201204
微信201204微信201204
微信201204
 
微信之道201204
微信之道201204微信之道201204
微信之道201204
 
在FLASH平台上开发大型MMO游戏
在FLASH平台上开发大型MMO游戏在FLASH平台上开发大型MMO游戏
在FLASH平台上开发大型MMO游戏
 
Erlang游戏开发
Erlang游戏开发Erlang游戏开发
Erlang游戏开发
 

为独立工作室构建跨平台引擎