(蓝图)虚幻4重制俄罗斯方块(一)二维数组构建地图

版权声明:原创作品,请不要直接复制粘贴发布 https://blog.csdn.net/qq_30919603/article/details/83276915

老规矩,先上效果图

(一)内容简介:

主要就是在蓝图中利用结构体声明,设置,调用二(多)维数组(矩阵)

最终构建出俄罗斯方块的整块画布

(二)创建资源

GameMode和PlayerController

内容浏览器中右键创建这两个东西并命名

右边世界设置里面设置GameMode和PlayerController为刚才自己创建的两个,如果没有世界设置,在左上角窗口中可以设置

BP_Blocks

新建一个Actor类,打开并添加一个立方体(Cube)组件,这个就是地图和方块的基本单位

接下来定义两个函数,一个显示方块一个隐藏方块,注意别打错√

S_A_Col_Array

创建一个结构体变量,将里面的元素类型该为整型和Array(数组)形式

这个变量是最重要的记录了整个地图的数据,后面主要围绕这个变量展开

S_Block_Col_Arry

同样的方法,再创建一个结构体变量,不过类型是Actor数组

这个结构体后面将用来存储方块,和前面的S_A_Col_Array结构体建立一一对应的关系,A数组里面不等于0就显示方块

(三)创建二维数组

打开刚才创建好的PlayerController蓝图,因为游戏并不是很复杂,所以以后的操作都在这个里面进行,后面就不赘述了

1.增加两个变量,length(长度)和width(宽度),我是以水平方向为长的(这个长表示哪条边一定要分辨开来,不然很容易乱),设置默认值length=12,width=24

为什么设置这个值看下图就一目了然了,后面对数组序号不理解的时候就回头看这个图

再创建两个变量,类型是刚才我们创建的两个结构体,同时改成数组类型

 ReStart函数

新建一个函数命名为ReStart,用来初始化地图,方便后面游戏结束后重新开始游戏

解释一下,之前创建的A_Col_Array数组中存放的就是一行中的元素,第一个resize设置A中有24个元素,就相当于24行

而第二个resize设置了每一行的元素数量为14,就是14列,后面的Blocks和A数组道理是一样的,后面就不啰嗦了

在上面的遍历结束后,接下来遍历设置A数组全部元素为0(特别小心一定是连Completed,这里可能没事后面就要出大问题)

这样ReStart函数就暂时完成了,后续如果还需要增加再补充说明,但等下一章介绍了宏之后,上图里面很多的循环就会变成下面这样,代码将会变得很简洁

BulidMap函数

接下来是构造地图函数BulidMap,spawn中的class设置成最开始创建的BP_Blocks的Actor

生成方块,添加到数组不难理解,这个地方关键是为什么要遍历A,用A的index 设置呢?

目的还是想使A数组和Blocks数组建立一一对应的联系,第一个Foreachloop其实遍历的行,第一行,第二行。。。而第二个遍历的是一行的列,第一行第一列、第一行第二列。。。

比如第一次执行的时候,第一个index为0,后面获取的Block数组的index也是0,第二个foreachloop会执行12次,那么就生成了12个方块的同时,添加了12个方块到Block数组的第0个元素中,于是Block第0个元素就成了一个有12个元素的数组

不啰嗦了,自行体会吧,直接事件列表中运行这两个函数看一下效果

(四)总结:

多维数组在Java,C++,Python等非可视化编程语言中,不管是定义还是实用都挺简单的,一句话搞定,但到了蓝图这里感觉变得复杂了,只能通过结构体来转一道,也没办法,既然是可视化编程,强调的就是一个可视化上,代码阅读上,一目了然,大概就这样子吧

猜你喜欢

转载自blog.csdn.net/qq_30919603/article/details/83276915