在 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(),如果玩家是站立的,就会跳跃!
一段时间以来,我一直在尝试实现跳转到我的平台游戏的开始,但没有成功。 我已经设法通过不断尝试将玩家向下移动来实现重力,如果他掉到屏幕底部以下则返回。
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(),如果玩家是站立的,就会跳跃!