三维物理 - 蜘蛛人篮球(难度:5级)
-
相关主题
引言
在本教程中,你将使用物理引擎制作一个有趣的篮球游戏:游戏的想法是,篮球通过一根绳子连接到空中的一个挂钩上,就像蜘蛛侠一样向前摆动。玩家可以决定何时添加或移除这根绳子,让球落入篮筐。
第1步 - 创建带有物理效果的空场景
首先,请在CreatiCode游乐场上创建一个新项目,删除小狗的角色Sprite1,并将“Empty1”角色重命名为“Main”(主角色)。在Main角色中,添加以下积木块。它们将创建一个带有蓝天的3D场景,显示3D坐标轴,并用-500的重力启用物理效果。
你应该会看到:
第2步 - 制作4个新积木
在这个游戏中,4个关键部件是篮筐、中间的挂钩、篮球和它的支架。让我们制作这4个新积木来组织我们的代码:
第3步 - 使用矩形管添加篮筐
为了盛装篮球,我们可以使用顶部开口的矩形管。以下3个积木将添加一个尺寸为150x150,深度为80的矩形管。我们使用“矩形管”形状为其添加物理实体,并将其质量设为0,让它悬浮在空中。把回弹设为0,这样球就不会弹出来,摩擦设为100%会减慢球的旋转速度。我们用白色线条在绿色网格上绘制。
你会得到这样的篮筐:
第4步 - 移动和旋转篮筐
接下来,我们沿Y轴向前移动篮筐,让球有足够的摆动空间。还要让篮筐绕X轴旋转45度,这样它的开口就会面向我们。
现在篮筐的位置是这样的:
第5步 - 添加挂钩
现在让我们添加挂钩。我们将用一个圆环来表示挂钩。由于没有“圆环”形状的物理实体,我们可以简单地使用“球体”或“盒子”形状。因为挂钩不会与其他物体碰撞,形状并不重要。把质量设为0,让它保持不动。回弹和摩擦的值也不重要。你可以为它添加任何颜色的网格材质。
它应该看起来像这样:
第6步 - 移动和旋转挂钩
挂钩需要被移动得更高,这样它可以帮助球摆动更长的距离。还要让它竖直站立。这两个积木可以做到:
现在挂钩看起来是这样的:
第7步 - 添加球的支架
球的支架是一个放在球下面的小平面。当游戏开始时,球会在支架上弹跳,直到用户将球连接到挂钩。我们将支架放在Y位置为-500的地方,这样当连接到挂钩时,球会向前摆动。支架的回弹设为100%,以保持球反弹。
支架会看起来像这样:
第8步 - 添加篮球
最后一个部件是篮球。注意,它需要被命名,并且需要使用25的Z偏移量,这是它高度的一半。它将被放在球的支架正上方。回弹设为100%,以保持它从支架上反弹。摩擦设为100%,这样当它落入篮筐时会迅速停止旋转。
现在运行程序,你应该看到一个弹跳的球:
第9步 - 添加跟随摄像机
因为球会向前摆动,我们需要添加一个跟随摄像机来跟随球。我们将让摄像机以水平角度45度观察球,这样更容易判断何时连接或断开球与挂钩。我们还将其设置为“自由”模式,这样玩家可以自由调整摄像机。
现在球会始终在我们的摄像机视图中心:
第10步 - 添加一个按钮控件
为了让玩家连接或断开球与挂钩,我们可以使用按键事件或按钮点击事件。在这种情况下,按钮更好,因为它可以让玩家在手机或iPad上玩,这些设备没有键盘。以下积木将按钮放在舞台的右下角。因为玩家的第一个动作是连接球与挂钩,我们应该在按钮上显示“连接”。
按钮的默认样式如下:
第11步 - 更新按钮样式
为了让按钮看起来更好,我们可以用这两个积木改变背景和文字样式:
按钮现在看起来是这样的:
第12步 - 将球连接到挂钩
现在我们准备好这个项目中最重要的一步了。为了让它看起来像球用一根绳子连接到挂钩,我们需要做两件事。- 首先,我们需要添加一个距离约束,它会让球与挂钩保持相同的距离。有了这个约束,球不会掉下来,而是在挂钩下方来回摆动。
- 其次,我们需要在球和挂钩之间添加一条线来表示“绳子”。注意我们需要使用移动的线,它会随着球移动。
注意,当我们添加距离约束时,我们需要使用“挂钩”作为第一个输入,因为挂钩是静止的,而球会摆动。“移动的线”会随着球移动,我们可以用“地毯”纹理来更新线条,使其看起来像绳子。
现在如果我们点击“连接”,绳子会出现,看起来球在摆动。
第13步 - 移除球的支架
当球在挂钩下摆动时,有时它可能会碰到球的支架:
为了避免这个问题,我们应该在连接球与挂钩时移除球的支架:
第14步 - 游戏阶段
当球连接到挂钩后,玩家的下一个动作是断开连接,这会把球投向篮筐。为了让界面简单,我们可以重复使用同一个按钮来执行这个动作。因为我们使用同一个按钮来执行不同的操作,我们需要一种方法来跟踪当前的“游戏阶段”。在这个游戏中,有3个阶段:
- 阶段1:从游戏开始到玩家将球连接到挂钩的那一刻;
- 阶段2:从玩家将球连接到挂钩的那一刻到玩家断开连接的那一刻;
- 阶段3:球从挂钩上断开后。
我们可以使用一个名为“phase”(阶段)的变量来表示当前的阶段。请创建这个新变量,并在游戏开始时将其设为1:
第15步 - 在阶段1处理按钮点击
现在我们可以在按钮被点击时运行不同的代码块。我们已有的代码块应该只在“phase”变量为1时运行:
第16步 - 准备进入阶段2
完成阶段1后,我们应该将“phase”变量设为2,因为我们进入了阶段2。还要把按钮改为显示“断开”,因为玩家需要在阶段2断开绳子:
现在,当我们点击它时,按钮会改变文字:
第17步 - 在阶段2处理按钮点击
在阶段2,当用户点击按钮时,我们应该移除距离约束和绳子,让球自由飞行。还要移除按钮,因为玩家没有更多的操作。我们也应该将“phase”设为3。
现在游戏可以玩了!点击“连接”添加绳子,然后点击“断开”投篮:
第18步 - 检查是否成功
在阶段3,我们需要检查球是否落入篮筐。我们可以用一个“永久重复”循环每秒检查一次:
第19步 - 检查球的位置和速度
如果球落入篮筐,它应该停止移动,Z轴的位置应该相对稳定。我们可以直接使用“获取”积木来检查这两个值:
Z轴速度应该接近0,Z轴位置应该大约是-131.8。我们可以用这两个条件来检查是否成功,如果成功就显示一个标签。
现在我们会得到这样的成功消息:
第20步 - 更新标签样式
为了让标签看起来更好,我们可以更新它的背景和文字样式:
现在成功消息看起来是这样的:
第21步 - 清理工作
最后,为了清理一下,我们应该隐藏3D坐标轴:
这是游戏的最终演示:
创意想法
你可以用很多方法来扩展这个项目。以下是一些示例想法:-
改变参数:你可以将球、挂钩和篮筐移动到不同的位置。你可以改变球或篮筐的大小,或者改变场景的重力。
-
两个挂钩:在从第一个挂钩断开后,你可以允许玩家在阶段3连接到另一个挂钩,然后在阶段4从它断开。第二个挂钩也可以在不同的方向上。这会让游戏更加有挑战性。下面是一个示例:
- 障碍物:为了让游戏更加有趣,你可以添加一些静态物体作为障碍物,让玩家必须避开它们。