Как определить, идет спрайт вверх или вниз - PullRequest
2 голосов
/ 31 марта 2012

I Используйте следующий код, чтобы определить, должен ли спрайт идти вверх или вниз, и получить ответ

    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 ]

3 голосов
/ 03 апреля 2012

Разве вы не можете просто сделать:

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 голос
/ 04 апреля 2012

Что-то, что может помочь, - это использование метода получения и установки, такого как this : По сути, вы можете создать tempX и tempY.Каждые 100 мс сравниваются текущие свойства спрайта с временными переменными.

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

...