【发布时间】:2022-08-08 18:07:29
【问题描述】:
对于希望在 Scratch 中提高技能并在 2D 游戏中添加重力和跳跃的人。易于使用且易于优化。这适用于平台游戏或其他有趣的游戏。
-
你为什么不找一个教程呢?有无数的教程。
-
这是我的教程。 @Falling10fruit
-
但是他说“这可以用于平台游戏或其他有趣的游戏”,您添加的内容需要更多平台游戏(天花板和墙壁检测)
标签: mit-scratch
对于希望在 Scratch 中提高技能并在 2D 游戏中添加重力和跳跃的人。易于使用且易于优化。这适用于平台游戏或其他有趣的游戏。
标签: mit-scratch
为了模拟从头开始的效果,我们将首先创建一个重力变量。确保您正在查看要应用效果的精灵的代码。
第 1 步:创建一个名为 Gravity 的新变量。
第 2 步:改变重力
当您的玩家或其他物体不接触地面、颜色或其他碰撞检测到的物体时,您将希望重力缓慢加速。您可以通过创建此脚本来做到这一点。
When Flag is Clicked:
Forever:
If(not touching[object or color]):
Change(gravity) by -1
If(touching[object or color]):
Set(gravity) to 0
当玩家没有与目标物体发生碰撞时,这将允许重力缓慢增加。现在,您可以通过重力改变玩家的 y 位置来应用这种重力。
完整脚本:
When Flag is Clicked:
Forever:
If(not touching[object or color]):
Change(gravity) by -1
end
If(touching[object or color]):
Set(gravity) to 0
end
Change Y By(gravity)
额外:如果你想把它带到另一个层次,你可以添加一个跳跃效果。这很容易。
脚本:
When Flag is Clicked:
Forever:
If(touching[object or color] and [key(up) is pressed]):
Set(gravity) to (desired jump height value)
【讨论】:
嗯,假设你的平台游戏中有墙壁和天花板
首先,您需要以下变量
X_Vel(X 的速度)
Y_Vel(Y 的速度)
沿着播放器的 X 和 Y
然后假设地面是一个叫做Level的精灵
然后你可以为重力做这个
Y_Vel = Y_Vel - 1
Y = Y + Y_Vel
然后是地板碰撞
if (Touching Level) then
Ground <- Custom block
if (Space Pressed) then
Y_Vel = 10 <- For jumping
else
Y_Vel = 0 <- Player doesn't melt to the floor
end
end
然后是自定义的“地面”块
Define Ground
repeat (abs(Y_Vel))
if (Touching Level) then
Y = Y + ((abs(Y_Vel) / Y_Vel) * -1)
end
end
end
您可能会注意到,如果角色没有足够重地撞击地面,它实际上并不会完全恢复原状,而这是故意的,并且是墙壁碰撞所必需的
您可能还注意到,如果 Y_Vel 为正值,角色也可能向下移动,这也是天花板碰撞的故意和需要的
继续,我们将进入左右代码,因为我们还没有完成墙壁碰撞代码,并且因为你说平台游戏。我们将需要速度来移动玩家以进行墙壁碰撞,所以接下来会发生什么:
if (A Pressed) then <- Or Right arrow key
X_Vel = -10
end
if (D pressed) then <- Or Left arrow key
X_Vel = 10
end
X = X + X_Vel <- Move player
随意编辑上面的代码以获得更多功能,如冲刺、加速、滚动等。
最后,墙壁碰撞
if (Touching Level) then
X = X + (X_Vel * -1)
X_Vel = 0
end
就是这样......除非你想改善墙壁碰撞并模仿地面/天花板碰撞。好吧,给你!
当然,如果您只是观看有关此问题的 YouTube 教程会更好。
【讨论】: