三维物理 - 蜘蛛侠篮球(难度:5级)
-
用到的相关知识
介绍
在这篇教程中,大家将利用物理引擎制作一个有趣的篮球游戏:

思路就是,用绳子将篮球与空中的挂钩相连接,篮球就会像蜘蛛侠一样摇荡。玩家可以决定什么时候添加绳子、什么时候去除绳子,从而让篮球落进篮筐里。
第1步 - 新建一个带物理引擎的空场景
首先,在创益编程游乐场新建一个项目,删除带小狗的角色1,然后把“空的1”角色改名为“主角”。
在主角角色中添加如下积木,将创建一个以蓝天为背景的三维场景,显示三维坐标轴,并启用物理引擎,重力为-500。

得到如下场景:https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/d2f3af9b-03f2-4873-aa8f-be205a7e27d8.gif" width="530" style="border-radius: 5px; border: 1px solid #29622d;">
第2步 - 制作4个新积木
在这个游戏中,4个主要的组件分别为篮筐、挂钩、篮球及其托盘。我们制作4个新积木来组织积木代码:

第3步 - 用方形管子制作篮筐
制作篮筐的方法,我们可以使用开口的方形管子。如下三个积木将添加一个方形管子,开口大小为150×150,深度为80。为篮筐设置“方形管子”形状的物理实体,质量设为0以使其停留在空中。恢复系数设为0,这样球就不会弹出去。摩擦系数设为100,能减慢球的滚动。篮筐上绘制绿色方格和白线。

就得到如下篮筐:
第4步 - 移动并转动篮筐
接下来,我们将篮筐沿着y轴向前移动,以便于篮球有一些摇摆的空间。另外,我们将篮筐绕x轴旋转45度,以便于使其开口朝向我们。

篮筐的新位置如下:
第5步 - 添加挂钩
现在我们制作挂钩。我们用一个圆环来表示挂钩。对于圆环的物理实体,因为没有“环状体”,我们只需要用“球体”或“盒子”。挂钩的形状无关紧要,因为它不会与其他物体碰撞。因为圆环要保持静止,所以其质量设为0。恢复系数和摩擦系数都不重要。大家可以随意添加一种颜色的网格材料。

做出来的挂钩如下:
第6步 - 移动并转动挂钩
为了让篮球能摇摆较长距离,挂钩需要移动到很高的位置。另外,挂钩应当竖立。用如下2个积木实现:

现在挂钩如下所示:
第7步 - 制作篮球托盘
篮球托盘就是位于篮球下方的一个小平面。游戏开始后,篮球会在托盘上弹跳,一直到用户将篮球连接到挂钩。
我们把托盘放到y坐标-500处,那么当篮球连接到挂钩时就会向前摇摆。为了让篮球反弹,托盘的恢复系数要设为100%。

托盘如下所示:
第8步 - 添加篮球
最后一个组件就是篮球。注意,篮球要命名,并且需要将z偏移设为25,也就是其高度的一半。
篮球要放在托盘的正上方。恢复系数也必须为100%,以便于从托盘上弹跳。此外,篮球的摩擦系数要设为100%,以便于落入篮筐之后快速停止滚动。

现在大家运行程序,就会得到如下弹跳的篮球:
第9步 - 添加跟踪摄像机
因为篮球要向前摆动,所以我们要用跟踪摄像机来跟踪篮球。使摄像机拍摄篮球的角度和水平夹角为45度,以便于判断何时将篮球与挂钩连接、何时断开连接。我们还要把摄像机设置为“自由”模式,这样的话玩家就能自由调节摄像机。

现在篮球位于摄像机视野中央:
第10步 - 添加按钮控件
为了让玩家将篮球与挂钩连接、断开连接,我们用一个按键事件或者按钮点击事件。在这个项目中,按钮是个更好的选择,因为玩家可以在手机或者平板上玩这个游戏。
后面这个积木将在舞台右下角添加一个按钮。因为玩家第1个操作是把篮球与挂钩连接,所以我们要在按钮上显示“连接”。

按钮的默认样式如下:
第11步 - 修改按钮样式
为了让按钮更美观一些,我们用下面这2个积木修改其背景和字体样式:

现在按钮如下所示:
第12步 - 将篮球与挂钩连接
现在我们准备做本项目最重要的一步。为了让篮球看起来像是用绳子连接到挂钩上,我们要做两件事。
- 第一,我们要添加一个距离约束,让篮球与挂钩保持相同距离。有了距离约束,篮球就不会下落,而是在挂钩下面来回摆动。
- 第二,我们要在篮球与挂钩之间连一条线,用来表示“绳子”。注意,我们用的是可移动的线,绳子会随篮球移动。
注意,当我们添加距离约束时,第1个输入框应当为“挂钩”,因为挂钩是静止的,而篮球要摇摆。“可移动的线”将随篮球移动,为了让线看起来像绳子,我们将其纹理改为“地毯”。

现在如果我们点击“连接”,就会出现一根绳子,看起来好像篮球在摇摆。
第13步 - 删除篮球托盘
当篮球绕挂钩摇摆时,有时还会碰到篮球托盘:

为了解决这个问题,当我们将篮球与挂钩连接后,删除篮球托盘即可:
第14步 - 游戏分阶段
篮球与挂钩连接后,玩家的下一个操作就是断开连接,这一操作会将篮球抛向篮筐。为了让用户界面简洁,这一操作我们还是用同一个按钮。
由于我们将同一个按钮用于不同的用途,我们想一个办法来跟踪当前的“游戏阶段”。在这个游戏中,有3个阶段:
- 第1阶段:从游戏开始到玩家将篮球与挂钩连接;
- 第2阶段:从玩家将篮球与挂钩连接到玩家将二者断开连接;
- 第3阶段:篮球与挂钩断开连接之后。
我们可以用一个变量“阶段”来表示游戏处于哪一阶段。新建这一变量,在游戏开始时将其设置为1:

第15步 - 在第1阶段点击按钮
现在,当点击按钮时我们就可以运行不同的积木代码。只有当变量“阶段”为1时才运行现有这些积木代码:

第16步 - 为第2阶段做准备
完成第1阶段后,我们要进入第2阶段,就要把变量“阶段”更新为2。同时,我们要把按钮改为显示“断开链接”,因为玩家要在第2阶段断开绳子:

现在当我们点击按钮时,按钮就会改变:
第17步 - 在第2阶段点击按钮
在第2阶段,当用户点击按钮后,我们就应当移除距离约束和绳子,从而让篮球自由飞出去。同时我们还要删除按钮,因为玩家不需要再操作什么了。然后把变量“阶段”更新为3。

现在就可以玩游戏啦!点击“连接”即可添加绳子,点击“断开连接”即可抛出篮球:
第18步 - 检查成功与否
在第3阶段,我们要检查篮球是否落入篮筐中。我们可以用一个无限循环每秒检查一次:

第19步 - 检查篮球的位置和速度
如果篮球已经落入篮筐中,就不会再动了,其z坐标应当不变。我们可以用如下这两个“获取”积木检查两个值:

z速度应当接近0,z位置应当约为-131.8。我们用这两个条件检查成功与否,如果成功就显示一个标签。

现在我们就会得到如下的成功消息:
第20步 - 修改标签样式
为了让标签更美观一些,我们可以修改其背景和文字样式:

现在的成功消息如下所示:
第21步 - 整理程序代码
最后要整理一下程序代码,要隐藏三维坐标轴:

游戏最终演示效果如下:
创意扩展
大家可以把这个项目扩展成多种形式。以下是一些思路:
-
修改参数:大家可以把篮球、挂钩和篮筐移到别的位置。可以更改篮球或篮筐的大小,还可以更改场景的重力。
-
2个挂钩:从第1个挂钩断开连接后,可以让玩家在第三阶段再连接到另一个挂钩,然后在第4阶段断开连接。第2个挂钩还可以在不同方向上。这就会让游戏更有难度。示例如下:

- 障碍物:为了让游戏更具挑战性,大家可以添加一些静止的障碍物,玩家必须要躲避障碍物。
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login