稀土掘金 稀土掘金

Construct 3:制作入门小游戏

Construct 3:制作入门小游戏

什么是Construct 3

Construct 3是面向非专业人士、少儿可视化游戏编程工具和技术,本质上是轻量级游戏引擎,通过表格式编程实现游戏逻辑。

为什么选择Construct 3

Construct 3完全在浏览器上运行,十分适合轻量级小游戏的开发,加上事件表(可视化编程)带来的编程效率大幅提高,使其适合作为游戏制作入门的练手引擎。

Construct 3官方网址

Construct 3科技树(目录):

  1. 前置科技(新手教程)
  2. 一级科技(2048)
  3. 二级科技(?)

前置科技:新手教程

首先上来跟着教程走,创建项目、双击添加对象实例(划重点:添加的实际上有两个东西,分别是对象和实例,这个后面会探讨),在事件表里添加事件编写各种情况下的逻辑。

新手教程结束后不要急着马上上手,你可以留在当前项目下继续修修改改,一方面熟悉制作流程,另一方面也能逐步培养写代码的兴趣(

比如这是我魔改后的新手项目:

部分事件表 iWanna - Construct 3 - Google Chrome 2023_9_13 20_36_58 (2).png

场景布置 iWanna - Construct 3 - Google Chrome 2023_9_13 20_36_45 (2).png

实机画面 新项目 - Google Chrome 2023_9_9 17_38_25.png

新项目 - Google Chrome 2023_9_9 17_38_41.png

这里我添加了怪物血量、怪物攻击力、人物血量以及简略显示和人物攻击力等。 这里是一些特性:

  • 每秒钟,系统会判断怪物数量是否到达上限,若未到达上限,怪物会在玩家一定范围外随机位置处生成。
  • 怪物有血条以及攻击力,攻击力又分为首次攻击伤害以及持续伤害。
  • 怪物拥有索敌范围,玩家进入该范围内时怪物会直接奔玩家而来。
  • 玩家击杀怪物后,一方面会掉落增强玩家攻击力的道具,另一方面还会提高怪物的索敌范围、移动速度、攻击力以及怪物数量上限。
  • 系统会根据玩家的累计击杀数以及怪物的强度动态调整分数的积累速度。

好了,想必到这里你已经迫不及待了吧,我知道你很急,但你先别急,这里还有补充的知识点:

  1. 在每个事件的右下角可以选择添加子事件以及注释

新项目 - Construct 3 - Google Chrome 2023_9_13 20_54_01 (2).png

  1. 子事件的添加中,可以声明局部变量

新项目 - Construct 3 - Google Chrome 2023_9_13 20_55_57 (2).png

一级科技:如何使用Construct 3构建年轻人的第一款2048

为了养成良好的习惯,任何事情在开始前都需要一份规划。越早在规划上确定事项,越能规避后期的风险。因此首先确定2048的底层游戏逻辑:

  • 玩家操控盘子中的数字块,相同的数字会合并得到更大的数字
  • 若玩家最终合并出2048的数字块,游戏胜利
  • 若玩家最终耗尽了空间,且未合并出2048的数字块,游戏失败

由于是轻量级小游戏,因此小游戏核心逻辑十分简单:

  • 读取键盘输入确定所有数字块的移动方向
  • 遍历每个数字块并移动,直到每个数字块不能再移动为止
  • 若数字块能与移动方向上的紧邻的数字块合并,则在移动方向上更远的数字块上生成新的合并后的数字块,并销毁原来的两个数字块
  • 若所有数字块均无法移动且无法合并则结束本轮移动,进行当前游戏状态(输/继续/赢)的判定

为此我们先准备好所有场景的美术素材:

  • 1 ~ 2048数字块共12张图片,分辨率72×72像素
  • 游戏背景一张(由Stable Diffusion生成)

iWanna - Construct 3 - Google Chrome 2023_9_11 15_51_25 (2).png 是不是有一种毛骨悚然的感觉?有就对了!什么?你问为什么这么毛骨悚然的地方为什么要安排一个御姐?当然是我也不知道啦)

现在可以切换至事件表编写游戏逻辑: 很多新手在这里时都会感到茫然无措,即使是明确了游戏逻辑也是如此。实际上不要忘记了:这是可视化编程! 可视化编程与代码式编程不同的地方在于:可以很轻易地将事件逻辑拖动到不同位置,因此不妨先将立马能想到的、必须包含的逻辑先列出来:

  • 处理键盘按下
  • 数字块的生成
  • 数字块的移动
  • 判断是否胜利

因此我们将上述逻辑对应的事件依次罗列出来: iWanna - Construct 3 - Google Chrome 2023_9_11 16_07_00 (2).png

然后我们按照游戏逻辑的时间顺序展开:生成新数字块->移动数字块->判断是否胜利(这顺序不是必须的,但必须是能让你的思路保持清晰的)

随机生成数字块

考虑一个数字块的生成条件:一块空的、未被占用的位置,用0表示未占用的格子,1表示已占用的格子,然后用一个4×4的矩阵来表示:

0100
0000
1011
0011

在不失一般性的情况下,我们希望新的数字块可以在任何空位置上生成。为此我们可以用一个全局变量blockStates记录所有格子的状态,再使用局部变量emptyCount统计场上剩余的空格数量,并生成一个在[1, emptyCount]范围内的随机数expectPos,然后再声明一个局部变量curCount记录已经遇到过的空格数量,按照先列后行的顺序遍历整张表,每遇到一个空格就令curCount+1即可: iWanna - Construct 3 - Google Chrome 2023_9_13 22_31_46 (2).png

请注意:此处使用了一个全局的字符串变量用于储存blockState,并使用一个i从0循环到15,依次取出blockState的第i个字符进行判断,其实就是模拟数组的操作 (坐标为(x, y)的格子对应blockStates的第x + y×4个字符,若你已经有了编程基础,相信这部分对你不是很难,若没有相关基础,则可以想象一个依次将表格的下一行添加到本行的末尾的过程,最终就能将一张二维表“压缩”成一张一维表)。

编程时要养成写好一个模块就测试的好习惯,这里我暂时添加了一个通过空格添加新的数字块的功能用于测试,然后运行,看看能不能成功填满所有空位: iWanna - Google Chrome 2023_9_11 17_29_45 (2).png

数字块的移动

效果不错,接着来捋一捋移动数字块的逻辑:

  • 读取键盘输入,确定移动方向。
  • 将矩阵按照移动方向分为4条道。
  • 确定当前移动的数字块的逻辑坐标,从而算出需要移动的数字块的坐标。
  • 判断数字块是否能够移动、是否需要合并。

这里我遇到了巨大的危机:已知一个数字块的坐标,我们该如何拿到这个数字块的对象呢?

第一时间想到的是将所有的数字块添加至同一个家族,通过遍历这个家族的所有对象从而获得我们需要的对象 (当然,这部分就是要付费版本了,所以有没有像我这样的穷鬼也能做的方法呢?)

可是如何获得原来的数字块对象呢?呼呼,我们没法在事件表里直接写出对应的逻辑,但是我们可以让一个代理者代替我们执行!例子就是在新手教程中,子弹在击中怪物时能够获得获得怪物对象并将其销毁,(这种思想的本质是让系统内的每个成员只完成自己的简单工作,最终合起来就能得到一个井然有序的、智能的系统) 我们这里要做的就是创建一个“推手”,它碰到数字块时会使数字块往我们设置的方向移动,然后为每个数字块遇到与自身相同的数字块时,就在被碰撞的数字块处生成一个新的数字块的事件即可。

先通过键盘输入确定数字块的移动方向: iWanna - Construct 3 - Google Chrome 2023_9_13 22_31_51 (2).png 解释一下:这里的addC以及addR是列增量行增量,将通过它代表所有数字块的移动方向。

移动数字块的部分分为4个函数:moveBlocks, moveBlock, moves以及clearBlocksiWanna - Construct 3 - Google Chrome 2023_9_13 22_11_39 (2).png

是不是已经晕了?别害怕,让我们一个一个来看:

函数moveBlocks用于生成一个位置序列,这个位置序列是数字块推手将要遍历的。为什么要专门用一个函数用于生成位置序列?以一个一维表作为例子进行说明:

假设某条道的数字块是这样的:1 - 1 - 1 - 1 我们希望不论是向左或是向右移动,最终的结果都是这样的:2 - 2,而不是1 - 2 - 1或其他。

一种方法是将这4个数字沿着移动方向依次标号为1、2、3、4(例如向右移动就是从左向右依次编号)。按照以下位置顺序,依次移动对应位置的数字块就能得到我们想要的结果:3 - 2 - 1 - 3 - 2 - 3。不论我们如何改变移动方向,我们只需要确保数字块推手在单条道内能够按照以上顺序进行移动,就能实现数字块的移动效果。不过当然,这里只是基本的理论,具体还要考虑移动方向对数字范围的影响,这方面可以使用一个状态表对不同的情况进行简化 (可惜这里位置太小了,写不下相关过程,笑),得到的最终结果是这样的: iWanna - Construct 3 - Google Chrome 2023_9_13 17_37_44 (2).png

函数moveBlock则是对是否能够移动一个数字进行进一步的判断,需要判断的内容包括:

  • 移动后是否超出边界范围
  • 移动方向上是否存在阻挡
  • 是否能够与相同数字块进行合并

前两条还很好理解,但是最后一条是什么呢?实际上在上面的移动顺序中,实际上最后的结果是 4 而非 2-2,这是因为数字1两两配对之后产生的一对2再次合并,因此我们需要引入新的全局变量canMerge ,要求新产生的数字块此状态为0,在下一轮移动(指新的键盘输入)前才改为1,只有canMerge为1的数字块能够被合并。得到的结果: iWanna - Construct 3 - Google Chrome 2023_9_13 21_56_39 (2).png

这里只写了数字1~8的逻辑,一方面是因为后续的数字块逻辑都是相同的,另一方面也是因为受到了行数的限制。可以看到,每个数字只在下一个位置为空,或者下一个位置的数字块与自身相同时才会移动,在合并的部分调用了clearBlocks的函数,这是因为在创建了新的数字块之后,我们还需将原来的数字块进行销毁: iWanna - Construct 3 - Google Chrome 2023_9_13 21_54_19 (3).png

最后的函数move是最简单的,却也是整个过程中最重要的,因为它负责全局变量的更新,即使我们的数字块显示有错误,但只要在后台的数据还是正确的,那我们也算成功了95% (此处伏笔)iWanna - Construct 3 - Google Chrome 2023_9_13 22_07_18 (2).png

判断是否胜利

最后是判断输赢的函数judgeVictory,哎呀,比起前面的真是十分滴简单~: iWanna - Construct 3 - Google Chrome 2023_9_13 22_38_00 (2).png 小tips:跳转到场景1可以快速重置。

最终效果

iWanna - Google Chrome 2023_9_13 17_43_00.png iWanna - Google Chrome 2023_9_13 22_39_19.png 可以看到确实数字块的显示是有点小问题的哈哈(旧的数字块没有成功被销毁)

Never gonna give you up, never gonna make you cry, never gonna say goodbye, never gonna tell a lie, and hurt you~

fin

玻璃钢生产厂家博物馆招标玻璃钢人物雕塑描述天津定制玻璃钢雕塑联系方式安阳太湖石玻璃钢雕塑公司厂家批发玻璃钢花盆便宜的生产玻璃钢雕塑厂家淮南抽象玻璃钢雕塑多少钱滑县玻璃钢花盆花器江苏玻璃钢花盆设计企业邳州商场美陈上海玻璃钢雕塑修补师傅武汉怀化玻璃钢卡通雕塑玻璃钢雕塑修补材料长沙公园玻璃钢雕塑订做价格郑州公园水景玻璃钢雕塑加工广东多彩玻璃钢雕塑市场中庭玻璃钢雕塑陶瓷玻璃钢花盆北京常见玻璃钢雕塑摆件北京商场美陈费用浙江创意玻璃钢雕塑定做价格人物玻璃钢泡沫雕塑哪家好仿铜玻璃钢雕塑素材河南季节性商场美陈供应玻璃钢人物雕塑怎么合作濮阳 玻璃钢雕塑制作玻璃钢雕塑厂家东莞自发光动物玻璃钢雕塑现货长春景区玻璃钢雕塑制作杭州商场美陈供应商玻璃钢雕塑马设计方案香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化