动态生成关卡选择按钮

在制作一些多关卡游戏时,如果关卡数过多,关卡选择按钮的摆放就会费时间。 本教程将为大家提供一种自动生成关卡按钮的方法。

点我下载工程文件
点我下载素材

布置场景

先创建背景图 (精灵组件)

接着创建关卡选择按钮 (按钮组件)


创建上一页/下一页按钮 (按钮组件)

因为我们要用事件表动态创建关卡选择按钮,所以先将按钮实例放入实例仓库场景。

调整按钮、按钮字体的大小

将上一页/下一页拖入场景

添加变量

关卡选择按钮添加两个实例变量

  • 跳转场景:字符型,代表该按钮所对应的场景
  • 编号:数值型,用于动态生成时按钮的排列。

添加全局变量

  • 当前页:当前位于关卡选择的第几页
  • 列数:一页最多能显示的列数,本教程中为10列
  • 行数:一页最多能显示的行数,本教程中为4行
  • 总关卡数量: 关卡的总数量,本教程中为50
  • 已解锁关卡数:已经解锁的关卡数量,本教程中为25

实现逻辑

首先,当场景开始时,我们需要初始化当前页变量为1,并使用动作组刷新按钮来更新场景内的按钮

接下来,我们实现刷新按钮动作组的逻辑

在创建新的按钮之前,我们需要先销毁掉旧的按钮

然后我们在子事件下创建4个局部变量

  • local_生成编号: 控制按钮生成的编号
  • local_初始坐标x: 第一个按钮的x坐标
  • local_初始坐标y: 第一个按钮的Y坐标
  • local_生成间隔: 按钮之间的间隔


接下来,根据当前页数以及一页可显示数量,设置按钮起始编号

接下来,我们循环创建按钮


每次循环列,local_生成编号+1

如果local_生成编号小于等于总关卡数量,则创建按钮

x坐标:local_初始坐标x + (local_生成间隔 * loopindex(“循环列”))
y坐标: local_初始坐标y + (local_生成间隔 * loopindex(“循环行”))

设置刚创建出来的按钮的文本、实例变量值:

  • 按钮文字:str(local_生成编号)
  • 编号:local_生成编号
  • 跳转场景: “场景”&local_生成编号

创建子事件,如果当前生成编号大于已解锁关卡数,将按钮禁用

如果local_生成编号大于总关卡数量,则停止生成按钮并且退出循环

同样在动作组中我们控制翻页按钮的显示
ceil(总关卡数量/(行数*列数))

以上便是动作组的全部逻辑,整体事件图如下:

现在预览游戏,就可以看到场景中生成了若干按钮。接下来我们要实现翻页功能。
翻页的逻辑很简单,当点击按钮时,修改当前页,并重新调用动作组

最后,实现跳转功能

我们只需按照按钮的实例变量命名场景即可

整体事件表如下图: