auto tile 2

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
            }

 

效果图

转载于:https://my.oschina.net/angyr/blog/866411

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值