三维物理 - 迷你台球游戏(难度:4级)
- 
					
					
					
					
 用到的相关知识
 介绍在这篇教程中,我们将利用物理引擎制作一个简单的迷你台球游戏。玩家用一个白色的母球把一个红色的目标球打进球袋里。  
 第1步 - 新建一个项目在创益编程游乐场新建一个项目。删除带小狗的“角色1”,我们只需要角色“空的1”。 请添加如下积木来初始化一个空场景,开启物理引擎,并设置摄像机和三维坐标轴。  
 第2步 - 创建3个新积木请创建3个新积木: - 添加球桌:用于添加一个带球袋的台球桌;
- 添加球:用于添加台球:
- 检查目标:用于检查目标球是否落入球袋中。
 初始化场景之后依次运行这三个积木:  
 根据积木代码所执行的任务进行组织编排,是个好办法。
 第3步 - 添加4个平面现在我们开始制作台球桌。简单起见,我们将制作一个中间有一个方形球袋的球桌。 首先添加4个平面,然后向对角方向移到4个角:  
 添加和移动平面的积木如下所示。例如蓝色平面,其中心点的x坐标为5000,是宽度10000的一半,所以它的左边缘与y轴重叠。 
 第4步 - 移动这4个平面形成一个方形的洞接下来,我们把每个平面在x和y方向上都移动100,从而在中心形成一个200×200的方形的洞。  
 代码改动如下。例如,蓝色平面的中心向右移动, X坐标从5000改为5100,那么它的左边缘与y轴的间隙为100。 
 第5步 - 添加网格材料现在添加一些网格线,让这4个平面看起来像是一个整体:  
 应用网格材料的积木如下所示。全部4个平面使用同样的积木。大家可以随意选择颜色: 
 第6步 - 添加物理实体现在我们还需要为这4个平面添加物理实体,平面可以用“盒子状”的物理实体。因为台球桌不移动,所以“质量”应当为0。并且,为了模拟真正的台球桌,我们要设置较低的恢复系数和较高的摩擦系数。 4个平面都添加如下积木:  
 第7步 - 制作球袋底部一旦球落入方形球袋中,我们就要使球停在里面。要做到这一点,我们可以在桌面下方90的地方添加一个方形平面。因为球的直径为100,这可以保证球会停在球袋中。  
 球袋底部的恢复系数应当为零,从而使球不会跳出来。还应当为静止的,所以质量为0。添加球袋底部的三个积木如下: 
 第8步 - 制作目标球我们做好了球桌,现在去编辑积木“添加球”。首先,我们添加一个红色的球,命名为“目标球”。为了让球看起来像是个塑料球,我们可以修改其光泽度和亮度:  
 添加球的积木如下所示: 
 第9步 - 为目标球添加物理实体我们把球的质量设为100,从而使它被碰撞后会移动。我们还要把恢复系数设置高一些,以便于当母球碰到它后速度会比较快。另外,我们还要让目标球静止,在我们击球前使它不移动。当我们击球后会解除静止状态。  
 第10步 - 制作母球接下来我们添加一个白色的“母球”:  
 添加母球的积木非常相似,与目标球的物理实体完全相同。 
 第11步 - 添加一个瞄准球为了帮助玩家指定将母球瞄准哪里,我们添加一个黄色的“瞄准球”。我们将把母球射向这个瞄准球。因为瞄准球并不是真的,我们使它部分透明,还要让用户能够在桌子上拖动这个球。注意,因为瞄准球也有物理实体,所以当我们拖动时不会与目标球重叠。另外,因为目标球是静止的,所以瞄准球不会影响目标球的位置。  
 添加瞄准球的积木如下:
  
 第12步 - 添加新控件现在我们要让玩家能够击球。首先,添加3个控件供玩家操作: - 一个滑动条,让玩家指定击母球的速度;
- 按钮“击球”,用球杆击母球;
- 按钮“重置”,重新玩。
  
 添加控件的积木如下: 
 第13步 - 击母球当玩家点击按钮“击球”,我们就应当把母球射向目标球。我们可以利用滑动条的数值设置母球的物理实体的速度,积木如下:  
 不过,当我们点击按钮“击球”,母球根本不动。原因就是,我们创建母球和目标球的时候把二者都设置成了静止。因此,我们要首先解除静止: 
 现在母球就能发射出去了: 
 还有个问题。黄色的瞄准球只是用来帮我们瞄准母球,并不让它撞到目标球。因此,当母球被击出后,我们就要删除瞄准球。完整代码如下: 
 现在母球就会向瞄准球移动,然后碰撞目标球: 
 第14步 - 重置球当点击按钮“重置”时,我们应当使球归位,让玩家重新玩。这一步其实很简单:我们只需要再次运行积木“添加球”。因为这3个球都有名称,当我们重新创建这3个球时,原来的球就自动被移除。  
 当你点击“重置”时的情景如下: 
 第15步 - 恢复瞄准球的位置当玩家击球并点击“重置”后,最好是把瞄准球放在玩家之前瞄准的地方。这样的话,玩家就可以根据上一次的尝试继续调整瞄准球的位置。 要实现这一点,我们要做3个改动: - 新建两个变量“x”和“y”,把初始值设为瞄准球的初始坐标:
  - 在积木“添加球”中用这2个变量设置瞄准球的位置:
  - 当我们击出母球之后,把瞄准球的新位置存入这2个变量:
  
 做这些改动后,每当我们移动了瞄准球,我们点击“重置”后瞄准球都会回到上一次移动的位置: 
 第16步 - 检查是否进球当目标球落入球袋后,我们可以看到其z坐标正好为-40。这是因为球袋底部的z坐标为-90,球的半径为50。  
 知道了这一点后,我们可以重复不断地检查目标球的z坐标来判断是否进球: 
 当我们知道进球以后,可以用一个标签展示成功消息。 
 现在如果我们运行程序,连按钮都不出现了。不要惊慌失措,原因是,积木“检查目标”包含一个无限循环,所以积木“检查目标”后面的所有积木都不运行。为了解决这个问题,我们只需要把积木“检查目标”移到程序的底部: 
 游戏的最终演示效果如下: 
 创意扩展现在大家已经学会了如何制作基本的游戏,可以把这个项目扩展成多种形式,让游戏更好玩。一些创意思路如下: - 
把球放在不同位置:把母球和目标球换个位置。 
- 
墙和障碍物:大家可以在球桌上放一些其他物体作为墙和障碍物,例如盒子、圆柱体,会阻挡母球和目标球,让游戏更有难度。另一方面,台球有时候需要从这些物体上反弹进入球袋。 
- 
多个目标球:玩家要把多个球打入球袋。 
- 
多个球袋:可以添加多个球袋,玩家要选择瞄准哪个球袋。 
- 
坡道:大家可以在球桌上添加一些坡道,使母球和目标球能够飞起来越过障碍物,或者跳上更高一层的球桌。 
- 
多个级别:像大多数游戏一样,大家可以设计多种难度级别。当玩家熟练以后,就会喜欢更有难度的级别。