2D ARPG开发之旅(1) ----- 贴图(tile-based)地图的实现(上)贴图修改版
2010-07-20 12:37
274 查看
发2D游戏中的地图有这么2种可能的实现方法:一就是先制作一整张大图然后在这个图上设置阻挡, 触发点等。而另一种就是利用一小块一小块的图形(也就是tile)拼成一个大的完整的地图
这2中方法各有优缺点,但是就我个人来说我更喜欢第二种方式,因为这种能更好的复用图形资源,也能很方便的实现一个比较大的地图。
我用了一个二维数组按tile保存地图信息,数组中的每个对象---我称之为MapCell----都包含了tile的地板类型,障碍,地板上的物体。下面是的MapCell类所包含内容的简单示意:
这种方式很简单,但是看起来不够“立体”
如果我们想制作一个看起来更立体的游戏, 等二角投影的tile可以工作得比矩形tile好得多
一个64*32的tile
二等角投影的tile需要在矩形tile的显示基础上做一些修改。第0,2,4….偶数行tile的显示与上例中的矩形tile显示一致,奇数行的tile在水平方向上要向左(向右效果类似)偏半个tile的宽度,在垂直方向上要向上偏移半个tile的高度。上例中的第4,5行要修改为:
二等角投影tile在屏幕中的平铺显示
这样绘制出的地图如上图所示会呈锯齿状,把突出的半个tile隐藏起来----比如说移动到可见区域之外----就能获得更好的显示效果了。
附一张我的游戏中的地图截图
注1:
我采用的tile是二等角投影的图形,也就是tile的宽高比为2:1。这个系列的文章也将会是以这个为基础。
注2:关于等二角投影,可以从菩提树下的杨过.Net处获得更多信息
用windows live直接发文章有时候似乎有些问题,之前的版本图出问题了重新发下
这2中方法各有优缺点,但是就我个人来说我更喜欢第二种方式,因为这种能更好的复用图形资源,也能很方便的实现一个比较大的地图。
我用了一个二维数组按tile保存地图信息,数组中的每个对象---我称之为MapCell----都包含了tile的地板类型,障碍,地板上的物体。下面是的MapCell类所包含内容的简单示意:
如果tile是矩形的,我们想将它铺满屏幕,只需要让左上角的tile在屏幕坐标系的坐标为(0,0),然后在绘制的时候做以下处理: for (var row : int = 0;row < _map.rowCount; row++){ for (var col : int = 0; col < _map.columnCount; col++){ var cell : MapCell =_map[row][col] as MapCell; var image : Image = new Image(); image.x = col * TILE_WIDTH; image.y = row * TILE_HEIGHT; image.source = cell.image; addChild(image); } }
这种方式很简单,但是看起来不够“立体”
如果我们想制作一个看起来更立体的游戏, 等二角投影的tile可以工作得比矩形tile好得多
一个64*32的tile
二等角投影的tile需要在矩形tile的显示基础上做一些修改。第0,2,4….偶数行tile的显示与上例中的矩形tile显示一致,奇数行的tile在水平方向上要向左(向右效果类似)偏半个tile的宽度,在垂直方向上要向上偏移半个tile的高度。上例中的第4,5行要修改为:
二等角投影tile在屏幕中的平铺显示
这样绘制出的地图如上图所示会呈锯齿状,把突出的半个tile隐藏起来----比如说移动到可见区域之外----就能获得更好的显示效果了。
附一张我的游戏中的地图截图
注1:
我采用的tile是二等角投影的图形,也就是tile的宽高比为2:1。这个系列的文章也将会是以这个为基础。
注2:关于等二角投影,可以从菩提树下的杨过.Net处获得更多信息
用windows live直接发文章有时候似乎有些问题,之前的版本图出问题了重新发下
相关文章推荐
- 2D ARPG开发之旅(1) ----- 贴图(tile-based)地图的实现(上)
- [Unity3D]Unity3D游戏开发之2D贴图实现血条组件
- Unity3D游戏开发之小地图的实现
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四)实现2D人物动画①
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(五)实现2D人物动画②
- Spring定时任务开发,实现动态修改时间参数,手动开启关停等
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(九) 2D游戏角色在地图上的移动
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四)实现2D人物动画①
- Unity2D - 3. 手动绘制简单瓦片地图TileMap
- Unity Shaders and Effects Cookbook (2-1) 修改 UV 坐标实现纹理贴图的滚动 模拟水流效果
- 2d游戏斜视角地图的实现
- Android开发实现Launcher3应用列表修改透明背景的方法
- iOS开发中Quartz2D绘图路径的使用以及条纹效果的实现
- Android开发,arcgis自定义layer-历史影像和地图缓存的实现
- 浅谈百度地图的简单开发之实现地图全景,内景展示功能(四)
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- GeoServer地图开发解决方案(五):基于Silverlight技术的地图客户端实现
- 用Javascript开发《三国志曹操传》-零部件开发(五)-可移动地图的实现
- 【Cocos2d-X开发学习笔记】第27期:游戏背景之贴图地图类(CCTileMapAtlas)的使用