Navigation

    CreatiCode Scratch Forum

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

    三维物理 - 迷你台球游戏(难度:4级)

    小教程
    1
    1
    383
    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步 - 新建一个项目

      在创益编程游乐场新建一个项目。删除带小狗的“角色1”,我们只需要角色“空的1”。

      请添加如下积木来初始化一个空场景,开启物理引擎,并设置摄像机和三维坐标轴。

      1.png

       
       

      第2步 - 创建3个新积木

      请创建3个新积木:

      • 添加球桌:用于添加一个带球袋的台球桌;
      • 添加球:用于添加台球:
      • 检查目标:用于检查目标球是否落入球袋中。

      初始化场景之后依次运行这三个积木:

      2.png

       
      根据积木代码所执行的任务进行组织编排,是个好办法。

       
       

      第3步 - 添加4个平面

      现在我们开始制作台球桌。简单起见,我们将制作一个中间有一个方形球袋的球桌。

      首先添加4个平面,然后向对角方向移到4个角:

       
      添加和移动平面的积木如下所示。例如蓝色平面,其中心点的x坐标为5000,是宽度10000的一半,所以它的左边缘与y轴重叠。

       
       

      第4步 - 移动这4个平面形成一个方形的洞

      接下来,我们把每个平面在x和y方向上都移动100,从而在中心形成一个200×200的方形的洞。

       
      代码改动如下。例如,蓝色平面的中心向右移动, X坐标从5000改为5100,那么它的左边缘与y轴的间隙为100。

       
       

      第5步 - 添加网格材料

      现在添加一些网格线,让这4个平面看起来像是一个整体:

       
      应用网格材料的积木如下所示。全部4个平面使用同样的积木。大家可以随意选择颜色:

      5.png

       
       

      第6步 - 添加物理实体

      现在我们还需要为这4个平面添加物理实体,平面可以用“盒子状”的物理实体。因为台球桌不移动,所以“质量”应当为0。并且,为了模拟真正的台球桌,我们要设置较低的恢复系数和较高的摩擦系数。

      4个平面都添加如下积木:

      6.png

       
       

      第7步 - 制作球袋底部

      一旦球落入方形球袋中,我们就要使球停在里面。要做到这一点,我们可以在桌面下方90的地方添加一个方形平面。因为球的直径为100,这可以保证球会停在球袋中。

       
      球袋底部的恢复系数应当为零,从而使球不会跳出来。还应当为静止的,所以质量为0。添加球袋底部的三个积木如下:

      7.png

       
       

      第8步 - 制作目标球

      我们做好了球桌,现在去编辑积木“添加球”。首先,我们添加一个红色的球,命名为“目标球”。为了让球看起来像是个塑料球,我们可以修改其光泽度和亮度:

       
      添加球的积木如下所示:

      8.png

       
       

      第9步 - 为目标球添加物理实体

      我们把球的质量设为100,从而使它被碰撞后会移动。我们还要把恢复系数设置高一些,以便于当母球碰到它后速度会比较快。另外,我们还要让目标球静止,在我们击球前使它不移动。当我们击球后会解除静止状态。

      9.png

       
       

      第10步 - 制作母球

      接下来我们添加一个白色的“母球”:

       
      添加母球的积木非常相似,与目标球的物理实体完全相同。

      10.png

       
       

      第11步 - 添加一个瞄准球

      为了帮助玩家指定将母球瞄准哪里,我们添加一个黄色的“瞄准球”。我们将把母球射向这个瞄准球。因为瞄准球并不是真的,我们使它部分透明,还要让用户能够在桌子上拖动这个球。注意,因为瞄准球也有物理实体,所以当我们拖动时不会与目标球重叠。另外,因为目标球是静止的,所以瞄准球不会影响目标球的位置。

       
      添加瞄准球的积木如下:
      11.png

       
       

      第12步 - 添加新控件

      现在我们要让玩家能够击球。首先,添加3个控件供玩家操作:

      • 一个滑动条,让玩家指定击母球的速度;
      • 按钮“击球”,用球杆击母球;
      • 按钮“重置”,重新玩。

      12.png

       
      添加控件的积木如下:

      13.png

       
       

      第13步 - 击母球

      当玩家点击按钮“击球”,我们就应当把母球射向目标球。我们可以利用滑动条的数值设置母球的物理实体的速度,积木如下:

      14.png

       
      不过,当我们点击按钮“击球”,母球根本不动。原因就是,我们创建母球和目标球的时候把二者都设置成了静止。因此,我们要首先解除静止:

      15.png

       
      现在母球就能发射出去了:

       
      还有个问题。黄色的瞄准球只是用来帮我们瞄准母球,并不让它撞到目标球。因此,当母球被击出后,我们就要删除瞄准球。完整代码如下:

      16.png

       
      现在母球就会向瞄准球移动,然后碰撞目标球:

       
       

      第14步 - 重置球

      当点击按钮“重置”时,我们应当使球归位,让玩家重新玩。这一步其实很简单:我们只需要再次运行积木“添加球”。因为这3个球都有名称,当我们重新创建这3个球时,原来的球就自动被移除。

      17.png

       
      当你点击“重置”时的情景如下:

       
       

      第15步 - 恢复瞄准球的位置

      当玩家击球并点击“重置”后,最好是把瞄准球放在玩家之前瞄准的地方。这样的话,玩家就可以根据上一次的尝试继续调整瞄准球的位置。

      要实现这一点,我们要做3个改动:

      • 新建两个变量“x”和“y”,把初始值设为瞄准球的初始坐标:

       

      • 在积木“添加球”中用这2个变量设置瞄准球的位置:

       

      • 当我们击出母球之后,把瞄准球的新位置存入这2个变量:

       
      做这些改动后,每当我们移动了瞄准球,我们点击“重置”后瞄准球都会回到上一次移动的位置:

       
       

      第16步 - 检查是否进球

      当目标球落入球袋后,我们可以看到其z坐标正好为-40。这是因为球袋底部的z坐标为-90,球的半径为50。

       
      知道了这一点后,我们可以重复不断地检查目标球的z坐标来判断是否进球:

      21.png

       
      当我们知道进球以后,可以用一个标签展示成功消息。

      22.png

       
      现在如果我们运行程序,连按钮都不出现了。不要惊慌失措,原因是,积木“检查目标”包含一个无限循环,所以积木“检查目标”后面的所有积木都不运行。为了解决这个问题,我们只需要把积木“检查目标”移到程序的底部:

      23.png

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

       
       

      创意扩展

      现在大家已经学会了如何制作基本的游戏,可以把这个项目扩展成多种形式,让游戏更好玩。一些创意思路如下:

      • 把球放在不同位置:把母球和目标球换个位置。

      • 墙和障碍物:大家可以在球桌上放一些其他物体作为墙和障碍物,例如盒子、圆柱体,会阻挡母球和目标球,让游戏更有难度。另一方面,台球有时候需要从这些物体上反弹进入球袋。

      • 多个目标球:玩家要把多个球打入球袋。

      • 多个球袋:可以添加多个球袋,玩家要选择瞄准哪个球袋。

      • 坡道:大家可以在球桌上添加一些坡道,使母球和目标球能够飞起来越过障碍物,或者跳上更高一层的球桌。

      • 多个级别:像大多数游戏一样,大家可以设计多种难度级别。当玩家熟练以后,就会喜欢更有难度的级别。

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