我使用以下代码来检测sprite是否应该上升或下降以及响应
If (pos.Y + 100) >= Sprite.BottomY Then
Going_up = True
pos.Y = Sprite.BottomY - 130
End If
If pos.Y <= Sprite.TopY Then
Going_up = False
pos.Y = Sprite.TopY - 1
Vel.Y = 3
End If
然后
If Going_up Then
Vel.Y -= CSng(gameTime.ElapsedGameTime.TotalMilliseconds / 40)
pos.Y -= Vel.Y
Else
Vel.Y += CSng(gameTime.ElapsedGameTime.TotalMilliseconds / 40)
pos.Y += Vel.Y
End If
Sprite.velocity = Vel
Sprite.position = pos
但这太可怕了。它只适用于精灵从顶部开始,当我想要更改BottomY和TopY时,它才会开始出现故障。什么是更好的检测精灵应该上升还是下降?
答案 0 :(得分:3)
你能不能这样做:
If (Vel.Y > 0) Then
Going_up = True
' Do rest of up code
Else If (Vel.Y < 0) Then
Going_up = False
' Do rest of not going up code
End If
答案 1 :(得分:1)
可能有用的东西是使用像this这样的getter和setter: 基本上,你可以创建一个tempX和tempY。每100ms将精灵的当前属性与临时变量进行比较。
Dim tempX As Double
Dim tempY As Double
While True
tempY = sprite.GetY()
If gameTime.ElapsedGameTime.TotalMilliseconds Mod 100 = 0 Then 'or something to sample the game time
If sprite.Vel.Y > tempY Then
Going_up = True
Else
Going_up = False
End If
End IF
End While
因此,您可以采用游戏板样本来创建近似参考点,以便比较实际值。希望有所帮助!
-sf