2D Jump and Rund Wie fall gravity?

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Gelöschter Benutzer.

    In meinem aktuell Spiel (3D) nutze ich folgendes:

    C-Quellcode

    1. Player.Acceleration.Y = 1f; // für die Initialisierungs Geschwindigkeit
    2. Player.Acceleration.Y -= 9.81f * .005f; // für die Abnahme der Geschwindigkeit.

    Kann man garantiert noch verbessern, aber hey, es geht :D
    Position:

    C-Quellcode

    1. Player.Y += Player.Acceleration.Y
    Du erstellst erstma die Geschwindigkeits-Vektoren.

    VB.NET-Quellcode

    1. If Keys.IsKeyDown(Keys.W) Then
    2. Player.Acceleration.Y = 1
    3. If Keys.IsKeysDown (Keys.D)
    4. Player.Acceleration.X = 1
    5. If (Keys.IsKeyDown (Keys.A)
    6. Player.Acceleration.X = -1

    Dann die Gravitation erzeugen:

    VB.NET-Quellcode

    1. Player.Acceleration.Y -= 9.81f * .005f

    Und die neuen Positionen bestimmen:

    VB.NET-Quellcode

    1. Player.X += Player.Acceleration.X
    2. Player.Y += Player.Acceleration.Y

    Was du nutzt (Point2D oder Vektor2D ist egal)
    Bitteeee nicht immer Timer.
    Wenn dann nen Thread und ansonsten Events benutzen. Timer NUR und ausschließlich nur dann verwenden, wenn es um ne Zeit geht. Das heißt: Countdown,...


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Kein C&P :D

    VB.NET-Quellcode

    1. Public Class Player
    2. Public Property Acceleration As Vector2
    3. Public Property Position As PointF
    4. End Class
    5. Public Struct Vector2
    6. Public Property Single X
    7. Public Property Single Y
    8. End Struct
    9. Private Sub Update()
    10. HandleInput()
    11. Gravity()
    12. Move()
    13. End Sub
    14. Private Sub HandleInput()
    15. ' Wenn Taste D gedrückt:
    16. Player.Acceleration.X = 1
    17. ' Wenn A gedrückt:
    18. Player.Acceleration.X = -1
    19. ' Wenn Leertaste einmalig gedrückt:
    20. Player.Acceleration.Y = 1
    21. End Sub
    22. Private Sub Gravity()
    23. Player.Acceleration -= 9.81f * .005f
    24. End Sub
    25. Private Sub Move()
    26. Player.Position.X += Player.Acceleration.X
    27. Player.Position.Y += Player.Acceleration.Y
    28. ' Hier auch Kollision überprüfen!
    29. End Sub


    Wenn von "Player" gesprochen wird, bitte immer die Instanz von der Klasse Player nutzen.
    Und Update() dann immer aus einem Thread aufrufen.
    Ich glaub ich bin zu dumm^^ ich versteh das nicht...
    hier mal mein Code...Bitte helft mir xD^^

    VB.NET-Quellcode

    1. Public Class GamePlayer
    2. Inherits GameComponent
    3. WithEvents Form As Form = Form1
    4. Sub New(ByVal Position As Point, ByVal Type As GameComponentType, ByVal Map As GameMap, ByVal Sprite As Bitmap)
    5. MyBase.New(Position, Type, Map, Sprite)
    6. End Sub
    7. Private Sub Form_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Form.KeyDown
    8. Dim iCol As Boolean = False
    9. For i = 0 To Map.Components.Count - 1
    10. Dim ComponentPosition = Map.Components(i).Position
    11. Dim ComponentRect As New Rectangle(ComponentPosition.X, ComponentPosition.Y, Map.TileSize.Width, Map.TileSize.Height)
    12. Dim MyRectangle As New Rectangle(Me.Position.X, Me.Position.Y, Map.TileSize.Width, Map.TileSize.Width)
    13. Select Case e.KeyCode
    14. Case Keys.Right
    15. If ComponentRect.Top = MyRectangle.Top And ComponentRect.Left = MyRectangle.Right Then
    16. iCol = True
    17. Exit For
    18. End If
    19. Case Keys.Left
    20. If ComponentRect.Top = MyRectangle.Top And ComponentRect.Right = MyRectangle.Left Then
    21. iCol = True
    22. Exit For
    23. End If
    24. Case Keys.Up
    25. If ComponentRect.Left = MyRectangle.Left And ComponentRect.Bottom = MyRectangle.Top Then
    26. iCol = True
    27. Exit For
    28. End If
    29. End Select
    30. Next
    31. If iCol = False Then
    32. Select Case e.KeyCode
    33. Case Keys.Up
    34. Me.Position = New Point(Me.Position.X, Me.Position.Y - Map.TileSize.Height)
    35. Case Keys.Left
    36. Me.Position = New Point(Me.Position.X - Map.TileSize.Width, Me.Position.Y)
    37. Case Keys.Right
    38. Me.Position = New Point(Me.Position.X + Map.TileSize.Width, Me.Position.Y)
    39. End Select
    40. End If
    41. End Sub
    42. End Class