文档章节

auto tile 2

angrycans
 angrycans
发布于 2017/03/24 16:59
字数 328
阅读 19
收藏 0

https://www.codeproject.com/kb/game/autotiles_algorithm.aspx#_comments

这篇文章的js实现

演示和具体代码请看这里http://jsdo.it/Acans/qRex

实际上个算法很简单,实现起来比rpg maker的模式简单很多

图1

图2

算法核心

地块区域如图2,由1~9个tile组成,需要在5号目标地方放入图块时,只需要改变红色区域的bit块为1 ,重新计算每个tile的二进制下标,对应显示图1的图块即可。

            if (x > 0) {
                if (y > 0) tile[x - 1][y - 1] |= 0x8;    // 1000
                tile[x - 1][y] |= 0xA;   // 1010
                if (y < tile_width - 1) tile[x - 1][y + 1] |= 0x2;   // 0010
            }

            if (y > 0) tile[x][y - 1] |= 0xC;    // 1100
            tile[x][y] |= 0xF;   // 1111
            if (y < tile_height - 1) tile[x][y + 1] |= 0x3;   // 0011

            if (x < tile_width - 1) {
                if (y > 0) tile[x + 1][y - 1] |= 0x4;    // 0100
                tile[x + 1][y] |= 0x5;   // 0101
                if (y < tile_height - 1) tile[x + 1][y + 1] |= 0x1;   // 0001
            }

这个算法是根据tile计算的。

还有个算法可以根据顶点来计算

图3

需要在红色区域的中心放置图块时,只需要设置红色区域bit=1 ,重新计算下标对应到图1的图块即可。

            if (x > 0) {
                if (y > 0) tile[x - 1][y - 1] |= 0x8;    // 1000
                if (y < tile_height) tile[x - 1][y] |= 0x2;   // 0010
            }

            if (x < tile_width) {
                if (y > 0) tile[x][y - 1] |= 0x4;    // 0100
                if (y < tile_height) tile[x][y] |= 0x1;   // 0001
            }

 

效果图

© 著作权归作者所有

共有 人打赏支持
angrycans
粉丝 0
博文 9
码字总数 3074
作品 0
南京
如何将UI5应用部署到Fiori On-Premise和On-Cloud的Launchpad上去

On-Premise Launchpad 具体步骤参考我的博客: 如何将BSP应用配置成Fiori Launchpad上的一个tile On-Cloud Launchpad Fiori Cloud Launchpad里每个tile分配的应用必须是已经部署到SAP Cloud P...

JerryWang_SAP
04/07
0
0
Fiori Launchpad Tile点击后跳转的调试技巧

在SAP Fiori launchpad 里点击某个tile之后,后台会计算出跳转的目标url返回给前台。 下图中一个个白色的方框就成为tile。每个tile点击之后,会打开一个对应的Fiori应用。 本文介绍如何在后台...

JerryWang_SAP
02/26
0
0
在浏览器里使用SAPGUI里的SE80

效果如图:点击Fiori launchpad的SE80对应的tile: 即可在浏览器里打开SE80 具体步骤 (1). 在后台找到Fiori catalog page ID: SAPFIORIEXTENSIBILITY (2). 打开Open Fiori Launchpad Design...

JerryWang_SAP
03/10
0
0
Auto Tile 自动拼接地图和墙壁

Auto Tile 自动拼接地图和墙壁算法google 了一下,自动拼接地图算法。 rpgmaker算法的大概思路就是素材图如下 每个tile 32X32 实际拼接的时候 是把素材图片分为16X16的小格子。如图: 自己观...

angyr
2016/05/28
84
0
【python】tile函数简单介绍

【python】tile函数简单介绍 格式:tile(A,reps) A:array_like 输入的array reps:array_like A沿各个维度重复的次数 举例:A=[1,2] tile(A,2) 结果:[1,2,1,2] tile(A,(2,3)) 结果:[[1...

Airship
2016/08/10
3
0

没有更多内容

加载失败,请刷新页面

加载更多

安全管理标准

安全生产严重等级分类: 故障频次: 风险等级矩阵:

乔老哥
31分钟前
2
0
数据结构“树”的相关微视频

今天在腾讯视频上闲逛,然後发现一个叫“岚人”的用户上传了几段小视频,基本上都在5分钟以内,讲解了关于树的一些结构和算法。零代码,非常适合初学者入门。不过,对于老鸟来说,这也是非常...

Iridium
43分钟前
1
0
10-利用思维导图梳理JavaSE-Java 集合

10-利用思维导图梳理JavaSE-Java 集合 主要内容 1.Collection接口 2.Set接口 2.1.Set接口概述 2.2.HashSet类 2.3.TreeSet类 2.4.SortedSet接口 3.List接口 3.1.List接口概述 3.2.ArrayList类...

飞鱼说编程
54分钟前
4
0
活动推荐|互联网3.0与区块链新时代论坛(北京)

1 时间地点 **时间:**9月22日 14:00 - 18:00 地点:(北京海淀)西大街70号 3w咖啡 二层 2 活动详情 Harmony创始人Stephen及团队将介绍他们的区块链分片扩容技术。Stephen曾任Apple地图服务...

HiBlock
今天
1
0
如何优雅的删除Redis的大key

关于Redis大键(Key),我们从[空间复杂性]和访问它的[时间复杂度]两个方面来定义大键。前者主要表示Redis键的占用内存大小;后者表示Redis集合数据类型(set/hash/list/sorted set)键,所含有的...

IT--小哥
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部