Auto Tile 自动拼接地图和墙壁
2016-05-28 00:00
615 查看
摘要: Auto Tile 自动拼接地图和墙壁
Auto Tile 自动拼接地图和墙壁算法
google 了一下,自动拼接地图算法。
rpgmaker算法的大概思路就是
素材图如下
每个tile 32X32 实际拼接的时候 是把素材图片分为16X16的小格子。
如图:
自己观察下墙壁的规律,可以发现有这几种情况。
根据上面anatomy-of-an-autotile 这篇文章的描述。
我们发现根据图块的当前的相邻块的状态可以确定当前块的图块组成。
核心算法
这儿结合之前的自动生成房间的代码,可以把房间的墙壁自动拼接上。
这儿有我用js写的演示程序 可以试用下。
http://jsdo.it/Acans/KjYQ/fullscreen
Auto Tile 自动拼接地图和墙壁算法
google 了一下,自动拼接地图算法。
大概有2种 1.ANATOMY OF AN AUTOTILE (VX/ACE) 这个方式是rpgmaker里面实现 http://blog.rpgmakerweb.com/tutorials/anatomy-of-an-autotile/ 2.Tile Bitmasking 算法实现 http://gamedevelopment.tutsplus.com/tutorials/tile-bitmasking-an-auto-tiling-solution-for-level-design--cms-25673 第二种算法实现 那篇文章说得很清楚了。
rpgmaker算法的大概思路就是
素材图如下
每个tile 32X32 实际拼接的时候 是把素材图片分为16X16的小格子。
如图:
自己观察下墙壁的规律,可以发现有这几种情况。
根据上面anatomy-of-an-autotile 这篇文章的描述。
我们发现根据图块的当前的相邻块的状态可以确定当前块的图块组成。
地图只会出现这几种情况 1.内向角 2.外向角 3.左右连接 4.上下连接 5.中心填充
核心算法
cls._convertNeighborhoodDataToBoundaryData = function(neighborhoodData){ var bd = [0, 0, 0, 0, 0, 0, 0, 0]; var n = neighborhoodData; // Compact variable name if (n[0][1] === 0) bd[0]++; // top if (n[0][1] === 1 && n[0][2] === 0 && n[1][2] === 1) bd[1]++; // top-right if (n[1][2] === 0) bd[2]++; // right if (n[1][2] === 1 && n[2][2] === 0 && n[2][1] === 1) bd[3]++; // bottom-right if (n[2][1] === 0) bd[4]++; // bottom if (n[2][1] === 1 && n[2][0] === 0 && n[1][0] === 1) bd[5]++; // bottom-left if (n[1][0] === 0) bd[6]++; // left if (n[1][0] === 1 && n[0][0] === 0 && n[0][1] === 1) bd[7]++; // top-left return bd; };
这儿结合之前的自动生成房间的代码,可以把房间的墙壁自动拼接上。
这儿有我用js写的演示程序 可以试用下。
http://jsdo.it/Acans/KjYQ/fullscreen
相关文章推荐
- Python - 数字转换字符串
- Swift 第一日
- java中的字符串处理
- 常用数据库语句
- 优化建议解决方案:未设置max-age或expires
- 如何设置max-age或expires来缓存您的站点文件
- 处理浏览器缓存有关问题(用时间戳)
- iOS多线程的初步研究(四)-- NSTimer
- MYSQL常用命令
- jsp路径获取
- 安卓数据库框架greenDAO(一)
- 纯css实现菜单激活状态切换
- vc6.0使用PathFileExists(...)函数的时候链接错误的解决办法
- 简单的下单程序
- Linux下常见的服务的端口
- USB描述符结构说明
- CRC32校验算法C语言版(查表法)
- arm linux挂载nfs根文件系统
- GCC编译生成bin
- FFT总结