29
从从从从Isometric Tile Based 从从从从从从 Hugh Tsai Nov 28 th 2010

[Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

从娑婆物语谈Isometric Tile Based

游戏引擎开发Hugh TsaiNov 28th 2010

Page 2: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

Contents什么是 Isometric Tile Based Game

为什么开发 Isometric Tile Based Game Engine ( 特性 )

如何构建 Isometric Tile Based Game Engine( 以自主开发的 Misato 引擎为例 )

引擎架构

核心问题地图格式渲染与遮挡碰撞检测

Page 3: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

What is Isometric Tile Based Game一些你或许知道或许并不了解的事实

Page 4: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

什么是 Isometric Tile Based Game基于区块的斜 45° 等角游戏

电子游戏

2D 游戏

基于区块

横版或纵版滚轴游戏

多方向滚轴地图游戏

六边形地图 四边形地图

90° 方向投影

60° 方向投影 斜 45° 方向投影

不分块

3D 游戏

Page 5: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

什么是 Isometric Tile Based Game基于区块的斜 45° 等角游戏

电子游戏

2D 游戏

基于区块

横版或纵版滚轴游戏

多方向滚轴地图游戏

六边形地图 四边形地图

90° 方向投影

60° 方向投影 斜 45° 方向投影

不分块

3D 游戏

Page 6: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

什么是 Isometric Tile Based Game基于区块的斜 45° 等角游戏

电子游戏

2D 游戏

基于区块

横版或纵版滚轴游戏

多方向滚轴地图游戏

六边形地图 四边形地图

90° 方向投影

60° 方向投影 斜 45° 方向投影

不分块

3D 游戏

Page 7: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

什么是 Isometric Tile Based Game基于区块的斜 45° 等角游戏

电子游戏

2D 游戏

基于区块

横版或纵版滚轴游戏

多方向滚轴地图游戏

六边形地图 四边形地图

90° 方向投影

60° 方向投影 斜 45° 方向投影

不分块

3D 游戏

Page 8: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

什么是 Isometric Tile Based Game基于区块的斜 45° 等角游戏

电子游戏

2D 游戏

基于区块

横版或纵版滚轴游戏

多方向滚轴地图游戏

六边形地图 四边形地图

90° 方向投影

60° 方向投影 斜 45° 方向投影

不分块

3D 游戏

Page 9: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

什么是 Isometric Tile Based Game基于区块的斜 45° 等角游戏

电子游戏

2D 游戏

基于区块

横版或纵版滚轴游戏

多方向滚轴地图游戏

六边形地图 四边形地图

90° 方向投影

60° 方向投影 斜 45° 方向投影

不分块

3D 游戏

Page 10: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

什么是 Isometric Tile Based Game基于区块的斜 45° 等角游戏

电子游戏

2D 游戏

基于区块

横版或纵版滚轴游戏

多方向滚轴地图游戏

六边形地图 四边形地图

90° 方向投影

60° 方向投影 斜 45° 方向投影

不分块

3D 游戏

Page 11: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

Why Use Isometric Tile Based Engine基于区块的斜 45° 等角渲染的特点

Page 12: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

Isometric Tile Based Engine 特性优势

内存与计算资源消耗小可以用 2.5D 视角模拟 3D 效果,提升游戏表现力基于预先渲染,美术可以无限精细,风格自由

局限性游戏视角变化很有限严格 45° 方向的键盘控制,对部分用户不适应没有透视感,高度判定易产生错觉

Page 13: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

Build Isometric Tile Based Engine以 Misato Engine 为例

Page 14: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

Build Isometric Tile Based Engine娑婆物语

基于 Misato Engine 开发的 2.5D 动作角色扮演游戏。游戏中,玩家控制 Avatar ,利用加速跑、跳跃、防御、时间暂停

等技能,躲避或防御弹幕攻击,跨越悬崖,解开机关,从而解谜剧情并完成闯关任务。

Page 15: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

Build Isometric Tile Based EngineMISATO ENGINE

Misato 引擎是一款基于 Flash 技术的 2.5D 网页游戏引擎。可以支持基于 2D 渲染的 2.5D 斜 45° 游戏模式,并且有 3D 的物理引擎支持。基于 Misato 引擎可以实现独特的 2D AVG 过场剧情与动画,与流畅绚丽的 2.5DARPG 游戏效果。

可定制的图形渲染模式3D 的物理效果高性能的 AI 算法

Why Named ByMISATO!

Page 16: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

Build Isometric Tile Based EngineMISATO ENGINE 架构

Page 17: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

Build Isometric Tile Based EngineMISATO ENGINE 架构

Page 18: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

Build Isometric Tile Based EngineMISATO ENGINE 地图格式

Staggered Map

坐标变换公式:

Diamond Map Slide Map

logic.y = ( 2 * stage.y ) / TileHeigth; logic.x = ( stage.x / TileWidth ) - ( logic.y & 1 ) * ( TileWidth / 2 ); stage.x = logic.x * TileWidth + ( logic.y & 1) * ( TileWidth / 2 ); stage.y = logic.y * TileHeigth / 2;

Page 19: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

Build Isometric Tile Based EngineMISATO ENGINE 地图格式

逻辑格子与图形个子对应表

mapLogicOrder = (mapGraphicRows - 1) / 2 + mapGraphicCols

logicRowStartCol[row] = (mapGraphicRows - 1) / 2 – row

logicRowEndCol[row] = mapLogicOrder - (mapGraphicCols - row)

Page 20: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

Build Isometric Tile Based EngineMISATO ENGINE 渲染与遮挡Input: 游戏的逻辑地图Output: 符合正确遮挡顺序的游戏场景

Page 21: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

Build Isometric Tile Based EngineMISATO ENGINE 渲染与遮挡Input: 游戏的逻辑地图Output: 符合正确遮挡顺序的游戏场景

Page 22: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

Build Isometric Tile Based EngineMISATO ENGINE 渲染与遮挡静态场景渲染处理

假设:地形只由 1 X 1 的 Tile 构成无需做遮挡排序按照 LogicRow -> LogicCol 的优先顺序,依次绘制即可

Page 23: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

Build Isometric Tile Based EngineMISATO ENGINE 渲染与遮挡动态遮挡的情况可能多种多样

Page 24: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

Build Isometric Tile Based EngineMISATO ENGINE 渲染与遮挡根据不同的渲染需求选择适合的遮挡处理方法

测试问题描述:显示区域内有 S = 1000 个静态 Tile , N 个动态的 Entity 。每一

个 Tile 与 Entity 都有高度,存在彼此之间存在遮挡。

1 、 N = O(1) 如 1 ~10 时算法 A :预先 Cache 全部静态 Tile 为位图置于底层, 同时标记可

能与动态 Entity 发生遮挡的静态 Tile 。当静态 Tile 与动态Entity 发生遮挡时,在 Entity 之上再绘制依次 Tile 进行遮挡。

性能与 N 成正比,对于每一个 Entity ,每次遮挡的开销就是,需要重绘其周围一片区域。

Page 25: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

Build Isometric Tile Based EngineMISATO ENGINE 渲染与遮挡根据不同的渲染需求选择适合的遮挡处理方法

测试问题描述:显示区域内有 S = 1000 个静态 Tile , N 个动态的 Entity 。每一

个 Tile 与 Entity 都有高度,存在彼此之间存在遮挡。

2 、 N = O(log S) 如 100 时算法 B :自定义一种基于链表的数据结构,来维护显示区域内的全

部 Tile 和 Entity 。动态调整 Tile 与 Entity 彼此之间的渲染顺序,并与 Stage 上的顺序进行同步。

基于 removeChild 和 addChildAt 操作,性能稳定,取决于每次调整的幅度。如果是滚屏显示,可以优化的空间很大。

Page 26: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

Build Isometric Tile Based EngineMISATO ENGINE 渲染与遮挡根据不同的渲染需求选择适合的遮挡处理方法

测试问题描述:显示区域内有 S = 1000 个静态 Tile , N 个动态的 Entity 。每一

个 Tile 与 Entity 都有高度,存在彼此之间存在遮挡。

3 、 N = S 如 1000 时算法 C :全部从舞台上移除,全部重排排序后再全部重绘。

性能恒定,就是全部重新排序重新绘制的开销。

Page 27: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

Build Isometric Tile Based EngineMISATO ENGINE 渲染与遮挡根据不同的渲染需求选择适合的遮挡处理方法测试结果:基于 FlashPlayer 10.0 每种算法渲染 100 次

算法 A 算法 B 算法 C0

500

1000

1500

2000

2500

3000

3500

N=1N=10N=100N=1000

单位 ms

2ms19ms

20ms50ms

Page 28: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

Build Isometric Tile Based EngineMISATO ENGINE 碰撞检测

静态碰撞基于 Tile 的格子进行判断。对于不同的表面形状,为各种 Tile ,包括地形和各种建筑,障碍物。设定固定的物理包围壳,根据不同的包围面进行物理计算。

动态碰撞将地图再次切分为更小的格子,比如一个 Tile切为 9 个小格。保证每个格子中有且只有一个动态的 Entity 。

这样虽然消耗一定的内存空间。但是对于碰撞可以很简单的处理,也有利于寻径等操作。

Page 29: [Flash开发者交流][2010.11.28]从娑婆物语谈 isometric tile based 游戏开发(蔡浩宇)

Thanks

Hugh TsaiNov 28th 2010

Referencehttp://www.47school.com/soft/Flash/yykf/2009/1002/57697.html

http://www.tilebasedgames.com/http://members.chello.at/theodor.lauppert/games/iso.htm

http://www.tonypa.pri.ee/tbw/start.html