<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[三维物理 - 蜘蛛侠篮球（难度：5级）]]></title><description><![CDATA[<h2><a class="anchor-offset" name="用到的相关知识"></a>用到的相关知识</h2>
<ul>
<li><a href="/topic/630/enable-physics-for-3d-scenes">为三维场景开启物理引擎</a></li>
<li><a href="/topic/640/adding-physics-bodies-for-3d-objects">为三维物体添加物理实体</a></li>
</ul>
<p dir="auto"> <br />
 </p>
<h2><a class="anchor-offset" name="介绍"></a>介绍</h2>
<p dir="auto">在这篇教程中，大家将利用物理引擎制作一个有趣的篮球游戏：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/ab43f97c-f268-4c15-99f9-3522b7d638d2.gif" alt="Animation8.gif" class=" img-fluid img-markdown" /></p>
<p dir="auto">思路就是，用绳子将篮球与空中的挂钩相连接，篮球就会像蜘蛛侠一样摇荡。玩家可以决定什么时候添加绳子、什么时候去除绳子，从而让篮球落进篮筐里。</p>
<p dir="auto"> <br />
 </p>
<h2><a class="anchor-offset" name="第1步-新建一个带物理引擎的空场景"></a>第1步 - 新建一个带物理引擎的空场景</h2>
<p dir="auto">首先，在创益编程游乐场新建一个项目，删除带小狗的角色1，然后把“空的1”角色改名为“主角”。</p>
<p dir="auto">在主角角色中添加如下积木，将创建一个以蓝天为背景的三维场景，显示三维坐标轴，并<a href="/topic/630/enable-physics-for-3d-scenes">启用物理引擎</a>，重力为-500。</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/4ecc1762-dda5-4aee-87ce-68544fe840e3.png" alt="1.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
得到如下场景：</p>
<p dir="auto"><img src="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" /></p>
<p dir="auto"> <br />
 </p>
<h2><a class="anchor-offset" name="第2步-制作4个新积木"></a>第2步 - 制作4个新积木</h2>
<p dir="auto">在这个游戏中，4个主要的组件分别为篮筐、挂钩、篮球及其托盘。我们制作4个新积木来组织积木代码：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/f7532fe1-6552-439d-8975-2ba76162fe76.png" alt="2.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
 </p>
<h2><a class="anchor-offset" name="第3步-用方形管子制作篮筐"></a>第3步 - 用方形管子制作篮筐</h2>
<p dir="auto">制作篮筐的方法，我们可以使用开口的方形管子。如下三个积木将添加一个方形管子，开口大小为150×150，深度为80。为篮筐设置“方形管子”形状的物理实体，质量设为0以使其停留在空中。恢复系数设为0，这样球就不会弹出去。摩擦系数设为100，能减慢球的滚动。篮筐上绘制绿色方格和白线。</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/6915af10-9874-44bc-b43c-caf045f7a6e9.png" alt="3.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
就得到如下篮筐：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/89a4be29-0581-4e36-b972-e88680f5176f.gif" alt="s1.gif" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
 </p>
<h2><a class="anchor-offset" name="第4步-移动并转动篮筐"></a>第4步 - 移动并转动篮筐</h2>
<p dir="auto">接下来，我们将篮筐沿着y轴向前移动，以便于篮球有一些摇摆的空间。另外，我们将篮筐绕x轴旋转45度，以便于使其开口朝向我们。</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/14ba7597-35dd-44bf-b53e-80a7d7866ac7.png" alt="4.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
篮筐的新位置如下：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/528f3b58-e981-415f-af8e-7681112d58e9.gif" alt="s1.gif" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
 </p>
<h2><a class="anchor-offset" name="第5步-添加挂钩"></a>第5步 - 添加挂钩</h2>
<p dir="auto">现在我们制作挂钩。我们用一个圆环来表示挂钩。对于圆环的物理实体，因为没有“环状体”，我们只需要用“球体”或“盒子”。挂钩的形状无关紧要，因为它不会与其他物体碰撞。因为圆环要保持静止，所以其质量设为0。恢复系数和摩擦系数都不重要。大家可以随意添加一种颜色的网格材料。</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/70840659-dca1-48d7-88cc-9bed33cf18cd.png" alt="5.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
做出来的挂钩如下：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/43adfb5e-04db-477e-b4e0-7d06c6579b9b.gif" alt="s1.gif" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
 </p>
<h2><a class="anchor-offset" name="第6步-移动并转动挂钩"></a>第6步 - 移动并转动挂钩</h2>
<p dir="auto">为了让篮球能摇摆较长距离，挂钩需要移动到很高的位置。另外，挂钩应当竖立。用如下2个积木实现：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/7d079197-fcf2-41c2-ac82-70c5d46f205b.png" alt="6.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
现在挂钩如下所示：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/61b6b0a4-61b5-4f2f-8e83-6e8724cba818.gif" alt="s1.gif" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
 </p>
<h2><a class="anchor-offset" name="第7步-制作篮球托盘"></a>第7步 - 制作篮球托盘</h2>
<p dir="auto">篮球托盘就是位于篮球下方的一个小平面。游戏开始后，篮球会在托盘上弹跳，一直到用户将篮球连接到挂钩。</p>
<p dir="auto">我们把托盘放到y坐标-500处，那么当篮球连接到挂钩时就会向前摇摆。为了让篮球反弹，托盘的恢复系数要设为100%。</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/aeb43f84-7e85-41dd-9384-73f8e9f97431.png" alt="7.png" class=" img-fluid img-markdown" /><br />
 <br />
托盘如下所示：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/406fa9d3-ad07-4aa1-9755-cf8d907b4f93.gif" alt="s1.gif" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
 </p>
<h2><a class="anchor-offset" name="第8步-添加篮球"></a>第8步 - 添加篮球</h2>
<p dir="auto">最后一个组件就是篮球。注意，篮球要命名，并且需要将z偏移设为25，也就是其高度的一半。</p>
<p dir="auto">篮球要放在托盘的正上方。恢复系数也必须为100%，以便于从托盘上弹跳。此外，篮球的摩擦系数要设为100%，以便于落入篮筐之后快速停止滚动。</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/4fb8a3c2-fd66-4d8a-aa5d-2cc4108eec0c.png" alt="8.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
现在大家运行程序，就会得到如下弹跳的篮球：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/b9ae41b3-ad5f-4217-952d-7923357800fc.gif" alt="s1.gif" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
 </p>
<h2><a class="anchor-offset" name="第9步-添加跟踪摄像机"></a>第9步 - 添加跟踪摄像机</h2>
<p dir="auto">因为篮球要向前摆动，所以我们要用跟踪摄像机来跟踪篮球。使摄像机拍摄篮球的角度和水平夹角为45度，以便于判断何时将篮球与挂钩连接、何时断开连接。我们还要把摄像机设置为“自由”模式，这样的话玩家就能自由调节摄像机。</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/cb0f3268-66fa-4db5-a6ba-f3fcc4e94661.png" alt="9.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
现在篮球位于摄像机视野中央：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/2c264aae-86b1-4b99-8951-f425a1af53b3.gif" alt="s1.gif" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
 </p>
<h2><a class="anchor-offset" name="第10步-添加按钮控件"></a>第10步 - 添加按钮控件</h2>
<p dir="auto">为了让玩家将篮球与挂钩连接、断开连接，我们用一个按键事件或者按钮点击事件。在这个项目中，按钮是个更好的选择，因为玩家可以在手机或者平板上玩这个游戏。</p>
<p dir="auto">后面这个积木将在舞台右下角添加一个按钮。因为玩家第1个操作是把篮球与挂钩连接，所以我们要在按钮上显示“连接”。</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/0b473204-d665-4cd5-93fa-ecb3f5d87b90.png" alt="10.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
按钮的默认样式如下：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/c2b17157-9899-406f-848d-1ec0f72c8eb2.png" alt="17.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
 </p>
<h2><a class="anchor-offset" name="第11步-修改按钮样式"></a>第11步 - 修改按钮样式</h2>
<p dir="auto">为了让按钮更美观一些，我们用下面这2个积木修改其背景和字体样式：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/cc773439-0025-4fa7-9499-63869943815e.png" alt="11.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
现在按钮如下所示：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/de71d296-b958-41b4-99cb-37d72c410068.png" alt="18.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
 </p>
<h2><a class="anchor-offset" name="第12步-将篮球与挂钩连接"></a>第12步 - 将篮球与挂钩连接</h2>
<p dir="auto">现在我们准备做本项目最重要的一步。为了让篮球看起来像是用绳子连接到挂钩上，我们要做两件事。</p>
<ul>
<li>第一，我们要添加一个<strong>距离约束</strong>，让篮球与挂钩保持相同距离。有了距离约束，篮球就不会下落，而是在挂钩下面来回摆动。</li>
<li>第二，我们要在篮球与挂钩之间连一条线，用来表示“绳子”。注意，我们用的是<strong>可移动的线</strong>，绳子会随篮球移动。</li>
</ul>
<p dir="auto">注意，当我们添加距离约束时，第1个输入框应当为“挂钩”，因为挂钩是静止的，而篮球要摇摆。“可移动的线”将随篮球移动，为了让线看起来像绳子，我们将其纹理改为“地毯”。</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/9a89d6f7-c1da-452f-a5dd-93f97ec091c1.png" alt="12.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
现在如果我们点击“连接”，就会出现一根绳子，看起来好像篮球在摇摆。</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/c4af2f7d-f447-47cd-be7c-cf56cd584a71.gif" alt="Animation1.gif" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
 </p>
<h2><a class="anchor-offset" name="第13步-删除篮球托盘"></a>第13步 - 删除篮球托盘</h2>
<p dir="auto">当篮球绕挂钩摇摆时，有时还会碰到篮球托盘：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/0c4e5a21-c3a5-41b8-8ea1-7294db38305f.gif" alt="Animation2.gif" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
为了解决这个问题，当我们将篮球与挂钩连接后，删除篮球托盘即可：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/3b06886f-4e8a-4404-8468-694d4f3b7349.png" alt="13.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
 </p>
<h2><a class="anchor-offset" name="第14步-游戏分阶段"></a>第14步 - 游戏分阶段</h2>
<p dir="auto">篮球与挂钩连接后，玩家的下一个操作就是断开连接，这一操作会将篮球抛向篮筐。为了让用户界面简洁，这一操作我们还是用同一个按钮。</p>
<p dir="auto">由于我们将同一个按钮用于不同的用途，我们想一个办法来跟踪当前的“游戏阶段”。在这个游戏中，有3个阶段：</p>
<ul>
<li><strong>第1阶段</strong>：从游戏开始到玩家将篮球与挂钩连接；</li>
<li><strong>第2阶段</strong>：从玩家将篮球与挂钩连接到玩家将二者断开连接；</li>
<li><strong>第3阶段</strong>：篮球与挂钩断开连接之后。</li>
</ul>
<p dir="auto">我们可以用一个变量“阶段”来表示游戏处于哪一阶段。新建这一变量，在游戏开始时将其设置为1：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/6ff7606e-c82c-4f65-a356-783382587a43.png" alt="14.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
 </p>
<h2><a class="anchor-offset" name="第15步-在第1阶段点击按钮"></a>第15步 - 在第1阶段点击按钮</h2>
<p dir="auto">现在，当点击按钮时我们就可以运行不同的积木代码。只有当变量“阶段”为1时才运行现有这些积木代码：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/e9b8f669-6c6e-42e3-a493-27eb0eef21b4.png" alt="15.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
 </p>
<h2><a class="anchor-offset" name="第16步-为第2阶段做准备"></a>第16步 - 为第2阶段做准备</h2>
<p dir="auto">完成第1阶段后，我们要进入第2阶段，就要把变量“阶段”更新为2。同时，我们要把按钮改为显示“断开链接”，因为玩家要在第2阶段断开绳子：<br />
<img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/ae21fc92-7669-48ae-9376-f3ef846a2062.png" alt="16.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
现在当我们点击按钮时，按钮就会改变：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/6a8ed86b-c7bd-4a36-87c9-d237d3b458e1.gif" alt="Animation3.gif" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
 </p>
<h2><a class="anchor-offset" name="第17步-在第2阶段点击按钮"></a>第17步 - 在第2阶段点击按钮</h2>
<p dir="auto">在第2阶段，当用户点击按钮后，我们就应当移除距离约束和绳子，从而让篮球自由飞出去。同时我们还要删除按钮，因为玩家不需要再操作什么了。然后把变量“阶段”更新为3。</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/4280bb3e-d861-49ba-9be6-73c917c668d8.png" alt="19.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
现在就可以玩游戏啦！点击“连接”即可添加绳子，点击“断开连接”即可抛出篮球：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/294aca8a-240d-4c73-8b5c-7716ef751e56.gif" alt="Animation5.gif" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
 </p>
<h2><a class="anchor-offset" name="第18步-检查成功与否"></a>第18步 - 检查成功与否</h2>
<p dir="auto">在第3阶段，我们要检查篮球是否落入篮筐中。我们可以用一个无限循环每秒检查一次：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/a9faa365-384e-45f3-a07c-2a336ea7aeb8.png" alt="20.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
 </p>
<h2><a class="anchor-offset" name="第19步-检查篮球的位置和速度"></a>第19步 - 检查篮球的位置和速度</h2>
<p dir="auto">如果篮球已经落入篮筐中，就不会再动了，其z坐标应当不变。我们可以用如下这两个“获取”积木检查两个值：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/1e2dc0aa-4ba5-426c-af0f-fca04fd9b4d8.gif" alt="Animation6.gif" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
z速度应当接近0，z位置应当约为-131.8。我们用这两个条件检查成功与否，如果成功就显示一个标签。<br />
 <br />
<img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/7aa2cbf7-c660-459c-a56c-41b65c3ae0a2.png" alt="21.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
现在我们就会得到如下的成功消息：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/62e82432-e773-45da-a3e5-75f09680614d.gif" alt="Animation7.gif" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
 </p>
<h2><a class="anchor-offset" name="第20步-修改标签样式"></a>第20步 - 修改标签样式</h2>
<p dir="auto">为了让标签更美观一些，我们可以修改其背景和文字样式：<br />
 <br />
<img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/c72478e2-25ab-4c94-9287-e2afe4b97373.png" alt="22.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
现在的成功消息如下所示：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/87324881-588c-4942-9d2b-0e63881f1998.png" alt="23.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
 </p>
<h2><a class="anchor-offset" name="第21步-整理程序代码"></a>第21步 - 整理程序代码</h2>
<p dir="auto">最后要整理一下程序代码，要隐藏三维坐标轴：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/584c5a39-67dc-4d3d-b682-71b47e9ecfb5.png" alt="24.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
游戏最终演示效果如下：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/ab43f97c-f268-4c15-99f9-3522b7d638d2.gif" alt="Animation8.gif" class=" img-fluid img-markdown" /></p>
<p dir="auto"> <br />
 </p>
<h2><a class="anchor-offset" name="创意扩展"></a>创意扩展</h2>
<p dir="auto">大家可以把这个项目扩展成多种形式。以下是一些思路：</p>
<ul>
<li>
<p dir="auto"><strong>修改参数</strong>：大家可以把篮球、挂钩和篮筐移到别的位置。可以更改篮球或篮筐的大小，还可以更改场景的重力。</p>
</li>
<li>
<p dir="auto"><strong>2个挂钩</strong>：从第1个挂钩断开连接后，可以让玩家在第三阶段再连接到另一个挂钩，然后在第4阶段断开连接。第2个挂钩还可以在不同方向上。这就会让游戏更有难度。示例如下：</p>
</li>
</ul>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/57f41eb6-6d4f-43ac-99cb-6ecb21f32912.gif" alt="Animation9.gif" class=" img-fluid img-markdown" /></p>
<p dir="auto"> </p>
<ul>
<li><strong>障碍物</strong>：为了让游戏更具挑战性，大家可以添加一些静止的障碍物，玩家必须要躲避障碍物。</li>
</ul>
]]></description><link>https://forum.creaticode.com/topic/921/三维物理-蜘蛛侠篮球-难度-5级</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Jul 2026 20:09:39 GMT</lastBuildDate><atom:link href="https://forum.creaticode.com/topic/921.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 21 Mar 2023 14:47:36 GMT</pubDate><ttl>60</ttl></channel></rss>