<?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[三维 - 带孔的立方体（难度：2级）]]></title><description><![CDATA[<p dir="auto"> </p>
<h2><a class="anchor-offset" name="先修科目"></a>先修科目</h2>
<ul>
<li><a href="/topic/801/%E4%B8%89%E7%BB%B4-%E9%AD%94%E6%96%B9-%E9%9A%BE%E5%BA%A6-2%E7%BA%A7">三维 - 魔方（难度：2级）</a></li>
</ul>
<p dir="auto"> </p>
<h2><a class="anchor-offset" name="用到的相关知识"></a>用到的相关知识</h2>
<ul>
<li><a href="/topic/192/%E5%88%9B%E5%BB%BA%E4%B8%89%E7%BB%B4%E5%9C%BA%E6%99%AF">创建三维场景</a></li>
<li><a href="/topic/279/%E5%8F%98%E9%87%8F%E7%AE%80%E4%BB%8B">使用变量</a></li>
<li><a href="/topic/761/%E5%8F%98%E9%87%8F%E5%BE%AA%E7%8E%AF">使用变量循环</a></li>
<li><a href="/topic/735/%E5%9C%A8%E4%B8%89%E7%BB%B4%E5%9C%BA%E6%99%AF%E4%B8%AD%E6%B7%BB%E5%8A%A0%E7%9B%92%E5%AD%90/1">使用盒子</a></li>
<li><a href="/topic/377/%E7%88%B6%E6%AF%8D-%E5%AD%A9%E5%AD%90%E5%85%B3%E7%B3%BB">父子对象关系</a></li>
<li><a href="/topic/354/%E5%90%8D%E7%A7%B0%E5%92%8C%E8%A7%92%E8%89%B2%E7%89%A9%E4%BD%93">物体命名</a></li>
<li><a href="/topic/368/%E4%B8%89%E7%BB%B4%E7%89%A9%E4%BD%93%E7%9A%84%E9%80%9F%E5%BA%A6/1">三维物体的速度</a></li>
<li><a href="/topic/388/%E5%88%9B%E5%BB%BA%E5%92%8C%E8%BE%93%E5%87%BA%E8%87%AA%E5%B7%B1%E7%9A%84%E4%B8%89%E7%BB%B4%E6%A8%A1%E5%9E%8B/1">将物体导出为GLB文件</a></li>
<li><a href="/topic/235/community-models">社区模型</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/ea63321d-d539-4401-8c01-5b02cfeef55a.gif" width="480" style="border-radius:5px;border:1px solid #29622d" /></p>
<p dir="auto"> </p>
<h2><a class="anchor-offset" name="第1步-改编并检查"></a>第1步 - 改编并检查</h2>
<p dir="auto">请在浏览器新标签打开下方项目，然后改编。</p>
<p dir="auto"><a href="https://play.creaticode.com/projects/0068cbafa5ad0c465f966315" target="_blank">https://play.creaticode.com/projects/0068cbafa5ad0c465f966315</a><br /> <br />
<iframe src="https://play.creaticode.com/projects/0068cbafa5ad0c465f966315/embed" width="485" height="402" allowfullscreen></iframe></p>
<p dir="auto">这个项目基于教程《<a href="/topic/801/%E4%B8%89%E7%BB%B4-%E9%AD%94%E6%96%B9-%E9%9A%BE%E5%BA%A6-2%E7%BA%A7">三维 - 魔方（难度：2级）</a>》，这个教程制作了一个包含5层、5行、5列的盒子阵列。</p>
<p dir="auto">由于所有盒子是一样的，所以看起来就是一个大的立方体。另外，自制积木“添加盒子“设置为”运行时不刷新屏幕“，让程序运行更快。</p>
<p dir="auto"> </p>
<h2><a class="anchor-offset" name="第2步-在中间留一个缝隙"></a>第2步 - 在中间留一个缝隙</h2>
<p dir="auto">现在我们开始在立方体中开一些孔。关键思路就是<strong>某些条件为真时不添加盒子</strong>。</p>
<p dir="auto">首先，添加一个积木“<a href="/topic/502/%E5%A6%82%E6%9E%9C-%E9%82%A3%E4%B9%88-%E5%90%A6%E5%88%99">如果&lt;&gt;那么…否则…</a>”，把条件设置为“<a href="/topic/556/%E6%AF%94%E8%BE%83%E5%A4%A7%E5%B0%8F%E8%BF%90%E7%AE%97">x = 0</a>”。然后就可以把添加盒子的积木放到“否则”分支里面。这样的话，每当变量x为0，我们就不添加盒子，就会在立方体中间留出一个缝隙。</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/942525a2-f175-43b2-95ab-1502a3cf4c9d.gif" width="1100" /></p>
<p dir="auto"> </p>
<h2><a class="anchor-offset" name="第3步-留一个洞"></a>第3步 - 留一个洞</h2>
<p dir="auto">我们改进一下条件，现在我们留一个洞，而不是一个缝隙。</p>
<p dir="auto">具体方法就是，检查x和y是否同时为0，只有满足此条件时，我们才不添加盒子。结果，在这个新的程序中有5个盒子略过没有加进去。</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/0f2b02bf-293a-4d62-89ed-7f1c9ef41398.gif" width="1100" /></p>
<p dir="auto"> </p>
<h2><a class="anchor-offset" name="第4步-第二个洞"></a>第4步 - 第二个洞</h2>
<p dir="auto">接下来，我们再添加一个洞，从前到后穿过立方体。这次我们要用一个新的条件：变量x和z都为0。只需要再添加一个积木“如果&lt;&gt;那么…否则…”，如果两个条件有一个成立就不添加盒子。</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/1e11c01e-e5e3-481e-98ad-ff1bf16bfc5d.gif" width="1100" style="border-radius:5px;border:1px solid #29622d" /></p>
<p dir="auto"> </p>
<h2><a class="anchor-offset" name="第5步-第三个洞"></a>第5步 - 第三个洞</h2>
<p dir="auto">现在请大家尝试添加第三个洞，从左到右穿过立方体。</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/b166eb32-e2f4-40e3-8654-e4ae4fd6519f.gif" width="480" style="filter:drop-shadow(0.35rem 0.35rem 0.4rem rgba(0, 0, 0, 0.5))" /></p>
<p dir="auto">包含3个“如果&lt;&gt;那么…否则…”分支的完整程序如下：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/2477006c-476f-4139-a704-acb8ad5648de.png" width="580" style="filter:drop-shadow(0.35rem 0.35rem 0.4rem rgba(0, 0, 0, 0.5))" /></p>
<p dir="auto"> </p>
<h2><a class="anchor-offset" name="第6步-使内部空间更大"></a>第6步 - 使内部空间更大</h2>
<p dir="auto">假如我们要在立方体内部挖一个更大的空间，可以把条件设置为：如果三个变量x、y、z全部小于等于100，我们就不添加盒子。提示，积木“绝对值( )”用来取绝对值，那么，如果x为-100，“绝对值(-100)”就为100.</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/aed16b83-7049-4f58-b355-cb96a52107f4.png" width="1000" /></p>
<p dir="auto">结果如下：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/95d85514-58ca-4c81-aa33-eae350036b57.gif" width="480" style="border-radius:5px;border:1px solid #29622d" /></p>
<p dir="auto"> </p>
<h2><a class="anchor-offset" name="第7步-添加一个转换器父节点"></a>第7步 - 添加一个转换器父节点</h2>
<p dir="auto">到目前为止，所有盒子都是相互独立的。为了把所有盒子变为一个对象，我们要将一个别的对象设置为所有盒子的父节点。</p>
<p dir="auto">做法就是，首先添加一个新的“转换器”对象，命名为“方块”。这个对象不可见，但我们仍然可以用来控制它的子对象。</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/ab12ed21-372f-4243-b2f6-6f32f549e1a8.png" width="400" /></p>
<p dir="auto">然后，我们要把“方块”设置为所有盒子的<a href="/topic/377/%E7%88%B6%E6%AF%8D-%E5%AD%A9%E5%AD%90%E5%85%B3%E7%B3%BB">父节点</a>：</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/c3307263-43f1-4696-bf44-22a993639d2e.png" width="800" /></p>
<p dir="auto"> </p>
<h2><a class="anchor-offset" name="第8步-使立方体旋转"></a>第8步 - 使立方体旋转</h2>
<p dir="auto">尽管我们得到的立方体和前面的一样，但现在我们能够利用父节点把所有盒子当做一个对象来控制。</p>
<p dir="auto">例如，我们使整个立方体绕z轴旋转。其做法为，首先要根据名称<a href="/topic/354/%E5%90%8D%E7%A7%B0%E5%92%8C%E8%A7%92%E8%89%B2%E7%89%A9%E4%BD%93">选取转换器对象</a>“方块”。这样的话，下面的所有积木都会应用到这个父对象。然后，我们把父节点的“<a href="/topic/368/%E4%B8%89%E7%BB%B4%E7%89%A9%E4%BD%93%E7%9A%84%E9%80%9F%E5%BA%A6/1">z轴旋转</a>”速度设置为100，所有子对象盒子就会随父对象一起旋转。</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/5c9559db-1fa9-4adb-8340-8b89bc4585d6.png" width="400" /></p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/ea63321d-d539-4401-8c01-5b02cfeef55a.gif" width="480" style="border-radius:5px;border:1px solid #29622d" /></p>
<p dir="auto"> </p>
<h2><a class="anchor-offset" name="第9步-把这个立方体导出为glb文件"></a>第9步 - 把这个立方体导出为GLB文件。</h2>
<p dir="auto">如果你想让别人使用你刚刚制作的立方体，就可以<a href="/topic/388/%E5%88%9B%E5%BB%BA%E5%92%8C%E8%BE%93%E5%87%BA%E8%87%AA%E5%B7%B1%E7%9A%84%E4%B8%89%E7%BB%B4%E6%A8%A1%E5%9E%8B/1">导出为<strong>GLB</strong>文件</a>。GLB格式是一种三维模型格式，就好比JPEG是二维图像格式，很多三维软件接受GLB格式文件。</p>
<p dir="auto">若要导出物体对象，只需要使用如下积木，并指定所要导出的对象名称“方块”。所有子对象都会被导出，这样就确保整个立方体导出为一个模型文件。</p>
<p dir="auto"><img src="https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/a29729df-44cf-4fe6-873c-2916febf519e.png" width="400" /></p>
<p dir="auto"> </p>
<h2><a class="anchor-offset" name="第10步-上传并分享自己的glb模型文件"></a>第10步 - 上传并分享自己的GLB模型文件</h2>
<p dir="auto">你可以在创益编程社区<a href="/topic/235/community-models">分享自己做的GLB模型文件</a>。这种模型被称为”社区模型“。</p>
<p dir="auto">只需进入“我的东西”页面，点击“三维模型”，然后根据引导上传GLB文件。上传以后，所有用户都能把你的模型加载到他们的场景中。</p>
<p dir="auto"> </p>
<h2><a class="anchor-offset" name="创意扩展"></a>创意扩展</h2>
<p dir="auto">这个项目可以改编成多种样式。下面是一些创意想法：</p>
<ol>
<li>
<p dir="auto"><strong>不同的条件</strong>：你可以尝试其他条件，如“x + y = 100”、“x * y = 10000”诸如此类。</p>
</li>
<li>
<p dir="auto"><strong>其他形状</strong>：把盒子换成<a href="/topic/358/%E7%90%83%E4%BD%93%E7%9A%84%E4%BD%BF%E7%94%A8">球体</a>或<a href="/topic/379/%E6%9F%B1%E4%BD%93%E5%92%8C%E7%AE%A1%E5%AD%90">柱体</a>，作为堆叠积木。</p>
</li>
</ol>
]]></description><link>https://forum.creaticode.com/topic/803/三维-带孔的立方体-难度-2级</link><generator>RSS for Node</generator><lastBuildDate>Tue, 17 Mar 2026 15:19:37 GMT</lastBuildDate><atom:link href="https://forum.creaticode.com/topic/803.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 16 Feb 2023 13:15:33 GMT</pubDate><ttl>60</ttl></channel></rss>