在 Visual Basic 中使用物理学让玩家跳跃?

Making a player jump using physics in Visual Basic?

一段时间以来,我一直在尝试实现跳转到我的平台游戏的开始,但没有成功。 我已经设法通过不断尝试将玩家向下移动来实现重力,如果他掉到屏幕底部以下则返回。

            Case GAME_STATUS.VOID
                Keyboard_Controls()
                plyer.movePlayer(0, g)
                If plyer.Bottom > Height Then
                    plyer.playerStanding(True)
                    plyer.movePlayer(0, -g)
                Else
                    plyer.playerStanding(False)
                End If

我正在苦苦挣扎的是实现一个基于真实物理学的 "jump"。 我是一名学习物理的 AS 级学生,所以我知道 SUVAT 和所有方程式,以及 f=ma,但是当按下向上键时我无法让我的播放器跳跃。有什么想法吗?

关键事件:

                Case Keys.W
            If Me.Controls.Contains(gamePanel) And gamePanel.Controls.Contains(plyer) Then
                u = True
            End If

我失败的物理尝试:

        If u = True Then
        Dim t, v As Double
        t = Get_Elapsed_Time() / 1000
        v = 0.5 + (g * t)
        plyer.movePlayer(0, v)
        'plyer.movePlayer(0, -(g*3))
        'If plyer.Top > 25 Then
        '    plyer.playerStanding(False)
        '    plyer.movePlayer(0, g)
        'End If
    End If

终于破解了!

将 xVel、yVel 添加到播放器 class 并通过在调用每个 gameLoop 的子例程中调整播放器的 yVel 重新实现重力。通过这样做,我所要做的就是改变 yVel 让玩家跳跃。代码如下:

在 mainLoop 中(替换我之前的重力代码):

                plyer.nextStep()
                If plyer.Bottom >= Height Then
                    plyer.playerStanding(True)
                    plyer.Location = New Point(plyer.Location.X, (Height - 10))
                Else
                    plyer.playerStanding(False)
                End If

在播放器中 class:

    Public Sub nextStep()
    If standing = False Then
        yVel += g
    Else
        yVel = 0
    End If
    Top += yVel
End Sub

Sub tryToJump()
    If standing Then
        standing = False
        Dim v, s As Double
        v = 0
        s = 75
        yVel = -(Math.Sqrt((v * v) - (2 * -g * s)))
    End If
End Sub

现在,当按下跳跃键时,它会调用tryToJump(),如果玩家是站立的,就会跳跃!