文档章节

auto tile 2

angrycans
 angrycans
发布于 2017/03/24 16:59
字数 328
阅读 31
收藏 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
码字总数 3025
作品 0
南京
私信 提问
Marketing Cloud里取得系统contact数目的API

Marketing Cloud里的Contact标准tile(下图红色tile)上是没有当前系统contact数字显示的,请对比profile tile(下图黑色tile)。 客户有需求希望在Launchpad Contact tile上也显示这个数字,因此...

JerryWang_SAP
06/01
0
0
Auto Tile 自动拼接地图和墙壁

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

angyr
2016/05/28
177
0
如何在Marketing Cloud里创建extension field扩展字段

首先在Marketing Cloud里找到创建扩展字段的tile入口,搜索关键字extension: 这会进入Fiori应用“Custom fields”,能看到系统里所有创建好的extension field。点击+加号按钮新建一个: 维护...

JerryWang_SAP
05/25
0
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
10
0
Android Material风格的应用(一)--AppBar TabLayout

打造Material风格的Android应用 Android Material风格的应用(一)--AppBar TabLayout Android Material风格的应用(二)--RecyclerView Android Material风格的应用(三)--DrawerLayout Android......

coderminer
2016/11/14
112
0

没有更多内容

加载失败,请刷新页面

加载更多

如何有效地计算JavaScript中对象的键/属性数量?

计算对象的键/属性数的最快方法是什么? 是否可以在不迭代对象的情况下执行此操作? 即不做 var count = 0;for (k in myobj) if (myobj.hasOwnProperty(k)) count++; (Firefox确实提供了一...

技术盛宴
22分钟前
2
0
百度网址安全中心拦截解除的办法分享

临近2019年底,客户的公司网站被百度网址安全中心拦截了,公司网站彻底打不开了,影响范围很大,于是通过朋友介绍找到我们SINE安全公司寻求帮忙解封,关于如何解除百度的安全拦截提示,下面就...

网站安全
33分钟前
3
0
Tomcat8源码分析-启动流程-start方法

上一篇:Tomcat8源码分析-启动流程-load方法 前面讲了启动流程中的Catalina.load,进一步调用绝大部分组建的init操作,主要完成对server.xml解析,并根据解析的结果结合设置的Rule(规则)构造...

特拉仔
42分钟前
6
0
Xamarin.FormsShell基础教程(7)Shell项目关于页面的介绍

Xamarin.FormsShell基础教程(7)Shell项目关于页面的介绍 轻拍标签栏中的About标签,进入关于页面,如图1.8和图1.9所示。它是对应用程序介绍的页面。 该页面源自Views文件夹中的AboutPage.x...

大学霸
48分钟前
3
0
一步一步理解Impala query profile(一)

很多Impala用户不知道如何阅读Impala query profile来了解一个查询背后正在执行的操作,从而在此基础上对查询进行调优以充分发挥查询的性能。因此我想写一篇简单的文章来分享我的经验,并希望...

九州暮云
49分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部