如何检测Sprite是上升还是下降

时间:2012-03-31 04:11:53

标签: vb.net xna windows-phone

我使用以下代码来检测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时,它才会开始出现故障。什么是更好的检测精灵应该上升还是下降?

2 个答案:

答案 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