老规矩,先上效果图
(一)内容简介:
主要就是在蓝图中利用结构体声明,设置,调用二(多)维数组(矩阵)
最终构建出俄罗斯方块的整块画布
(二)创建资源
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等非可视化编程语言中,不管是定义还是实用都挺简单的,一句话搞定,但到了蓝图这里感觉变得复杂了,只能通过结构体来转一道,也没办法,既然是可视化编程,强调的就是一个可视化上,代码阅读上,一目了然,大概就这样子吧