三维物理 - 汽车冲撞盒子墙(难度:3级)
-
介绍
在这篇教程中,大家将制作一个简单的物理仿真游戏。玩家将驾驶汽车冲撞一摞盒子,能撞飞越多盒子得分越高。
https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/b16e6b2b-eb36-4090-ae5f-4bd36fa5bc65.gif" width="470" style="border-radius: 5px; border: 1px solid #29622d;">
第1步 - 新建一个带物理引擎的空场景
首先,在创益编程游乐场新建一个项目,删除带小狗的角色1,然后把“空的1”改名为“主角”。
在“主角”角色中,添加以下积木。将创建一个空的三维场景,显示三维坐标轴,并启用物理引擎,重力为-1000.

得到如下结果:https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/dcab15b1-1272-4bd4-bf5c-3694932d2ee3.gif" width="470" style="border-radius: 5px; border: 1px solid #29622d;">
第2步 - 添加一个广阔的地面
接下来,利用平面添加一个广阔的地面,宽4000,长15000,然后为地面添加网格材料,大家可以用自己喜欢的颜色:

制作的地面如下所示:https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/f06043c4-3166-4139-a825-a3995d8c95f0.gif" width="480" style="border-radius: 5px; border: 1px solid #29622d;">
第3步 - 为地面设置物理实体
地面不能动,所以质量应当设置为0。其恢复系数和摩擦系数对于这个游戏来说并不重要。设置物理实体的积木如下:

第4步 - 添加一个坡道
接下来,我们为汽车添加一个坡道,就是一个小平面,宽600,长1000。大家可以根据喜好添加网格材料。把坡道绕x轴旋转一个小角度,比如15度,然后移到前面,以便于给汽车留一些加速空间。

汽车坡道如下所示:https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/1d83f5db-fe9e-4c6e-8e6b-ec0a5db4a2c2.gif" width="480" style="border-radius: 5px; border: 1px solid #29622d;">
第5步 - 为坡道设置物理实体
为坡道设置与地面相同的物理实体:

第6步 - 广播2条消息
到目前为止,我们已经搭建好了平台。接下来,我们就要添加靶位盒子和玩家的汽车。做法就是,在“主角”角色广播如下这2条消息:

第7步 - 角色“靶子”
要添加靶位盒子,最好在一个新角色中来做。添加一个空角色并命名为“靶子”,然后在这个角色中接收“添加靶子”事件:

第8步 - 添加盒子墙
为了在角色“靶子”中添加盒子墙,我们可以用2个新变量“x”和“z”,并用2个嵌套的遍历循环来控制这2个变量。盒子大小为100,第1个变量循环的x坐标从-200走到200,第2个变量循环的z坐标从50走到450。盒子的y坐标都相同,为5500。添加盒子的积木代码如下:

添加的盒子墙如下所示:
第9步 - 设置不同颜色
为了让盒子外观各不相同,我们可以为每个盒子应用随机颜色的网格材料:

现在的盒子墙如下:
第10步 - 为盒子墙设置物理实体
最后,我们需要为每个盒子设置物理实体,只有这样才能让汽车与盒子相撞。设置一个较大的摩擦系数,以便于盒子不太容易滑动:

第11步 - 角色“汽车”
现在我们准备添加汽车了。和之前一样,我们还是在一个新角色中操作,新角色命名为“汽车”,在这个角色中处理消息“添加汽车”:

第12步 - 添加汽车模型
首先,我们添加“赛车”模型,高度为50。

添加的“赛车”模型如下:
第13步 - 启用汽车仿真模拟
接下来就是本教程最重要的一步,用如下积木[启用汽车模拟]:(/topic/750/car-with-physics-simulation):

汽车的质量是单个盒子的10倍。较大的恢复系数将会使汽车撞到盒子后将盒子飞弹出去。轮胎摩擦系数10%会使轮胎有点打滑,这样的话,当前轮转向时,车身就会有点漂移。
第14步 - 添加跟踪摄像机
现在我们添加一个跟踪摄像机,当汽车转向时会跟随汽车。“主方向”设置为“自由”,以便于玩家能够随时缩放和转动摄像头。

跟踪摄像机的新视角如下所示:https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/d1a36efc-f026-4374-b204-277ef19ff203.gif" width="470" style="border-radius: 5px; border: 1px solid #29622d;">
第15步 - “D”、“A”键控制方向
现在要让玩家能够用键盘驾驶汽车。我们用一个无限循环来检查按键。
首先,我们处理前轮的转向角度。当按下“D”健,我们让车轮右转15度;当按下“A”健,左转15度;如果没有按下按键,车轮笔直向前。

从车底可以清晰看到前轮的动作:https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/f771bc3e-08a8-469d-8b72-82047921b5da.gif" width="470" style="border-radius: 5px; border: 1px solid #29622d;">
第16步 - 按“W”键向前行驶
接下来我们要处理发动机动力和刹车系数,这两项独立于转向角度。
当按下“W”键,我们设置一个较大的正数动力,设置刹车系数为0。

第17步 - 按“S”键向后行驶
同理,如果按下“S”键,我们就要把发动机动力设置成负数,从而使汽车倒退:

第18步 - 按“空格”键刹车
当按下“空格”键,我们就要把发动机动力设置为0,刹车系数设为10%。这样的话,汽车就会重复不断减速10%。如果没有按下任何按键,我们把发动机动力和刹车系数都设为0。

第19步 - 星空背景
最后,为了让场景更美观,我们可以在“主角”角色中设置一个星空背景,还要隐藏三维坐标系:

游戏最终演示效果如下:https://cdncreaticodecom.b-cdn.net/scratch-gui-projects/forum/b16e6b2b-eb36-4090-ae5f-4bd36fa5bc65.gif" width="470" style="border-radius: 5px; border: 1px solid #29622d;">
创意扩展
在这篇教程的基础上,大家可以改编成更有趣的游戏,以下是一些思路建议:
- 不同的靶子:大家可以更改盒子墙的位置、形状和数量,盒子不必都叠在一起。
- 不同的坡道:大家可以设计不同的坡道,还可以提供多个坡道。
- 不同的目标:玩家把所有盒子都撞出平台就算完成游戏。
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