Navigation

    CreatiCode Scratch Forum

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • CreatiCode

    三维 - 物理益智游戏(难度:3级)

    小教程
    1
    1
    160
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      creaticodeteacher2-mail last edited by admin

       

      用到的相关知识

      • 广播消息与接收消息

       
       

      介绍

      在这篇教程中,大家将利用物理引擎制作一个三维益智游戏。玩家点击哪个盒子就会删除哪个盒子,目标就是让球滚进篮子里。

       
       

      第1步 - 新建一个项目,带4个空角色

      在创益编程游乐场新建一个项目。删除角色“角色1”,把角色“空的1”改名为“主角”。

      之后再添加3个空角色,分别命名为“盒子”、“篮筐”和“球”。这样的话,我们就可以利用不同角色为场景中的不同物体编排代码积木。

       
       

      第2步 - 新建一个空场景

      现在我们开始编排“主角”的代码。请添加以下积木,将会创建一个空的三维场景并显示三维坐标轴。我们还要把摄像机拉远,以便于看到添加的全部物体。

      1.png

       
      大家可以用按钮“+”在“三维场景”类别快速添加这些积木:

       
      当你点击绿旗后就得到如下结果:

       
       

      第3步 - 开启物理引擎

      若要在项目中使用物理引擎,要先为场景启用物理引擎。我们把重力设为-1000,会让球快速下落。

      2.png

       
       

      第4步 - 广播消息“添加盒子”与接收消息

      现在该添加盒子了。“主角”角色向“盒子”角色发送消息,“盒子”角色将完成制作盒子的实际工作。

      在“主角”角色,添加积木“广播( )并等待”,消息为“添加盒子”。“等待”将确保盒子被成功添加后再继续添加其他物体。

      3.png

       

      在“盒子”角色中,我们用如下积木接收消息:

      4.png

       
       

      第5步 - 添加一个带网格线的盒子

      在“盒子”角色中,我们创建第一个盒子,并应用“网格材料”。盒子网格线的颜色可随意挑选。

      5.png

       
      这些积木将会在场景中央生成一个大小为100的盒子:

       
       

      第6步 - 给盒子添加物理实体

      现在为盒子添加物理实体。参数如下:

      • 形状:因为我们应用于盒子物体,形状应当为“盒子”。
      • 质量:质量设置为0,保证盒子不移动、不旋转。
      • 恢复系数:设置一个较大值80%,从而使球在盒子上有较好的弹性。
      • 摩擦系数:设置一个较小值30%,从而使球在盒子上滚动时不会减速太多。

      6.png

       
       

      第7步 - 从中心矩阵复制

      现在我们要把这个盒子复制很多份,5行、5列。积木“从中心矩阵复制”专门用于此用途。注意,有2个积木包含“矩阵复制”,一定要选对。

      7.png

       
      这个积木会沿x轴左右分别复制2列。同理,会把这些列前后分别复制2行。另外,由于第1个盒子具有物理实体,那么复制出来的全部盒子都具有同样的物理实体。

      s6.gif

       
       

      第8步 - 把网格线移到边缘上

      我们发现一个问题就是网格线的帮助不大。我们想要网格线显示盒子边缘,而不是盒子中心。解决办法就是在每个方向上将网格线移动50单位:

      8.png

       
      现在我们可以清晰看到5行、5列盒子:

      s7.gif

       
       

      第9步 - 上面加一层盒子

      接下来,我们要在这一层盒子上方加一层盒子。我们首先添加一个新盒子,然后将其移动到第1个盒子上方。因为第1个盒子的z坐标为0,第2个盒子的z坐标应该为100。

      9.png

       
      第2个盒子在这里:

      s8.gif

       
       

      第10步 - 修改颜色并复制新盒子

      现在我们可以把这个新盒子作为“种子”来制作另一层盒子。大家可以从上方复制三个积木,然后换成其他颜色:

       
      现在制作出如下两层盒子:

       
       

      第11步 - 第三层

      通过“制作副本”也能快速添加第3层盒子。大家只需要修改z坐标和颜色:

       
      现在我们就做好了全部三层盒子:

       
       

      第12步 - 开启选取事件

      我们要让玩家能够点击盒子即可删除。为了做到这一点,我们首先要为盒子开启选取事件:

      10.png

       
      这个积木会确保“盒子”角色中添加的全部盒子都会响应鼠标选取事件,所以我们不需要一个个盒子去处理。

       
       

      第13步 - 删除鼠标选中的盒子

      每当鼠标选中某个盒子,这个盒子的名称就会保存在变量“被选取物体名字”。因此,我们利用对应的名称删除盒子,如下所示:

      11.png

       
      现在大家可以尝试点击盒子以删除。注意,仍然可以拖动鼠标指针来旋转摄像机,该操作不会删除盒子。

       
       

      第14步 - 消息“添加球”

      现在就该添加球了。首先,我们要从“主角”角色向“球”角色发送一条命令消息。

      在“主角”角色中,添加积木“广播( )并等待”,其中的消息为“添加球”:

      12.png

       
      然后在“球”角色中,添加以下积木来接收消息:

      13.png

       
       

      第15步 - 添加一个排球

      现在我们在“球”角色中添加一个排球模型。排球大小为190,比两层盒子稍微小一点。我们还要把“z坐标偏移”设置为其高度的一半,也就是95。这是因为所有模型的原点都在其底部,但我们要让排球绕着自身的中心旋转。

      14.png

       
       

      第16步 - 移动排球

      排球的初始位置为x: 100,y: 100,z: 400

      15.png

       
      球在盒子上方离开一定距离。球不落下是因为我们还没有给球添加物理实体,所以还不受物理引擎驱动。

       
       

      第17步 - 给球添加物理实体

      现在我们给排球添加一个球形物理实体。“质量”应当设置为1,从而会由于重力下落。“恢复系数”和“摩擦系数”与盒子相同。

      16.png

       

      添加过物理实体后,排球就会落下并在盒子上弹跳。当我们移除排球下方的盒子,排球会继续下落:

       
       

      第18步 - 消息“添加篮筐”

      这个游戏的最后一个物体就是方形篮筐。跟其他物体一样,我们要用一个新消息“添加篮筐”。

      在“主角”角色中,广播这条消息:

      17.png

       
      然后在“篮筐”角色中,接收这条消息:

      18.png

       
       

      第19步 - 添加一个方形管子

      接下来在“篮筐”角色中用代码积木制作篮筐。

      篮筐可以用一个方形管子来制作,4个侧面加1个底。开口大小为200乘200,比排球稍大一点。

      为篮筐应用网格材料,然后移动到盒子的前下方:

      19.png

       
      篮筐如下所示:

       
       

      第20步 - 为篮筐添加物理实体

      篮筐用来盛放排球,所以也需要一个物理实体。我们可以用“长方管子”形状,这种形状的物理实体只能用于长方管子。

      其“质量”应当为0,这样它就不会移动。“恢复系数”也设置一个较小值,从而使排球不会弹出来。

      20.png

       
      现在就可以玩游戏了!如果排球滚到篮筐里,就会停在里面。

       
       

      第21步 - 检查是否成功

      如果玩家未能把球放进篮筐里,可以重新开始游戏。如果球进了篮筐,我们要有一个办法宣布玩家已经成功了。

      由于球在篮筐中不会移动,所以我们可以检查2个条件:由于球没有在空中下落,球在z方向的速度应当为0。球的z坐标应当为一个固定值。我们在“球”角色中运行这个积木即可找出z坐标。
      46fd7cd3-fb20-4e0a-81a8-b6e959bfde6e-Animation5.gif

       
      因此,我们只需在“球”角色中重复不断检查这二个条件:

      67a60a23-3fe4-4c53-a658-8971f7ec1809-21.png

       
       

      第22步 - 添加标签控件“成功!”

      当玩家成功后,我们可以显示一个大标签“成功!”,这可以用标签控件来做。请添加“控件”扩展,然后在“球”角色中添加如下积木:

      23a34e8b-98f2-4249-bc61-d789a19af16b-22.png

       
      注意:大家首先要运行积木“添加标签”,在舞台上添加标签之后,再添加积木“为控件设置背景”和“为控件设置字体”,并从下拉菜单中选择“标签1”。

       
       

      第23步 - 调整“添加球”和“添加篮筐”的顺序

      如果大家现在运行项目,会发现场景中没有添加篮筐。原因就是,在“主角”角色中我们等着“添加球”完成以后才能添加篮筐。然而,由于消息“添加球”会触发“球”角色中的“重复执行”循环,这个循环永远不会停止,我们就要永远等下去。

      若要解决这个问题,请进入“主角”角色,调整这2条消息的顺序:

      db6030fe-141b-4875-a586-5214f1843e50-Animation6.gif

       
       

      第24步 - 整理

      最后,整理一下场景,在“主角”角色做3个小改动。第一,换成“蓝天”场景。第二,隐藏三维坐标轴。第三,把摄像头的俯视角度设置为65度。

      622da2cd-d41d-4fcc-9e59-639001b27914-23.png

       
      游戏的最终演示效果如下:

       
       

      创意扩展

      现在大家学会了如何制作基本的游戏,有很多办法来改进这个游戏:

      • 把球/篮筐换个位置:把球和篮筐移动到别的位置,玩游戏就要用不同的方法。

      • 不同的盒子:把盒子摆放在不同位置,可以摆放无限种形式。

      • 倾斜的盒子:盒子可以稍微倾斜一点,制作一些有趣的斜坡。

      • 某些盒子不可删除:为了让游戏增加难度,大家可以让某些盒子不可删除。玩家就必须想办法绕过障碍物。

      • 奖品:为了让游戏更好玩,大家可以在场景中放置一些奖品。例如,大家可以在盒子里放一枚金币,如果球碰到这枚金币,球就缩小一半或者场景中出现一些新盒子。

      • 游戏规则:大家可以添加一些游戏规则,比如时间有限、删除的盒子数量有限。另外,大家可通过检查球的z坐标来判断玩家是否失败。

      • 游戏升级:当玩家完成一个级别的游戏后,可以显示一个按钮让玩家进入下一个级别继续玩。

      1 Reply Last reply Reply Quote 0
      • First post
        Last post