(一)思路
首先大家要搞清楚方块在地图中显示的原理,是根据定位点,把B数组中的元素,映射到地图A数组里面去
而移动则是改变定位点的位置,实际上没有任何东西在移动,仅仅是改变定位点的位置
因为由于定位点坐标已知,那么可以计算出B数组映射在A的中范围,同时遍历B数组,如果B中为0就设置A中相同位置也为0,反之则为1即可
如果设定位点坐标为(a,b),那么A中的范围可以表示为a<=X<=a+3,b-3<=Y<=b
(二)显示方块
LocPoint
如果上面的思路清晰了,很显然首先要一个变量存储定位点坐标,打开之前的MyPlayerController蓝图,添加一个整型数组变量,并添加两个元素并设置默认值,0号元素表示x设置成4,1号元素表示y设置成3
下一步定义是要根据条件,设置A数组,最后达到显示方块的功能
需要满足两个条件后再设置A的值为1
IsLoc
第一个条件要缩小范围到以定位点确定的16个格子中,点上纯虚函数,XY表示A的坐标
第二个条件要满足,A中的格子为0,B中对应格子元素为1
IsAandBbothEqual
最后创建一个函数
SetAbyCondition
这里的setAbyIndex的输入值和前面不一样是因为我增加了一个局部变量,更方便一点
好了,最后到事件图表中,把刚才的函数拖到ShowMap之前,设置好rowname的值为1,就可以看效果了
(三)移动方块
控制的方法有很多,这里就用最快的ASD来实现进行左下右移动吧
先弄出这三个键(在搜索列表的很下面),再设置LocPoint的X或Y,设置A,最后显示地图
目前得到的结果大概是这个样子,方块是移动了,新的方块也显示了,但原来的方块并没有隐藏
解决办法很简单,我们只需要在设置A之前,把整个地图A中的1先删掉,暂时就可以了
(四)刷新地图
ReFlashMap
新建一个函数,调用遍历A宏进行判断后设置A的值为0即可
很显然的是,前面创建的宏和一些函数,为我们节省了相当多的空间和时间,不过现在你会发现你的方块可以移动到围墙之外去,这是不允许的,我们会在后面解决这个问题