【问题标题】:How to create gravity in Scratch?如何在 Scratch 中创建重力?
【发布时间】:2022-08-08 18:07:29
【问题描述】:

对于希望在 Scratch 中提高技能并在 2D 游戏中添加重力和跳跃的人。易于使用且易于优化。这适用于平台游戏或其他有趣的游戏。

  • 你为什么不找一个教程呢?有无数的教程。
  • 这是我的教程。 @Falling10fruit
  • 但是他说“这可以用于平台游戏或其他有趣的游戏”,您添加的内容需要更多平台游戏(天花板和墙壁检测)

标签: mit-scratch


【解决方案1】:

为了模拟从头开始的效果,我们将首先创建一个重力变量。确保您正在查看要应用效果的精灵的代码。

第 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)

【讨论】:

    【解决方案2】:

    嗯,假设你的平台游戏中有墙壁和天花板

    首先,您需要以下变量

    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 教程会更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 2012-02-08
      相关资源
      最近更新 更多