Ich versuche mich gerade an einem kleinen Spiel, dass das Prinzip von Pokemon hat. Also man steuert einen Spieler auf einer Map.
Mein Problem ist die Levelabgrenzungen bzw. Mapabgrenzungen wo der Spieler nicht durchlaufen kann sondern einfach nur gegen rennt.
Im großen und ganzen hab ich genau das auch geschafft, aber: Wenn ich gegen die Mauer laufe (in diesem Beispiel nach unten) und während ich die Taste noch halte eine andere Taste (zB nach links) drücke bleibt der Spieler trotzdem an der Wand stehen anstatt nach links zu laufen.
Weiß jemand von euch wie ich das beheben könnte? ZB mit einer besseren Möglichkeit den Spieler daran zu hindern durch die Mauer zu gehen.
Hier der Code:
Mein Problem ist die Levelabgrenzungen bzw. Mapabgrenzungen wo der Spieler nicht durchlaufen kann sondern einfach nur gegen rennt.
Im großen und ganzen hab ich genau das auch geschafft, aber: Wenn ich gegen die Mauer laufe (in diesem Beispiel nach unten) und während ich die Taste noch halte eine andere Taste (zB nach links) drücke bleibt der Spieler trotzdem an der Wand stehen anstatt nach links zu laufen.
Weiß jemand von euch wie ich das beheben könnte? ZB mit einer besseren Möglichkeit den Spieler daran zu hindern durch die Mauer zu gehen.
Hier der Code:
Quellcode
- Public Class Form1
- Dim moveRight As Boolean = False
- Dim moveDown As Boolean = False
- Dim moveLeft As Boolean = False
- Dim moveUp As Boolean = False
- Dim xNew As Long
- Dim yNew As Long
- Dim xOld As Long
- Dim yOld As Long
- Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
- Select Case e.KeyValue
- Case Keys.D
- moveRight = True
- Case Keys.S
- moveDown = True
- Case Keys.A
- moveLeft = True
- Case Keys.W
- moveUp = True
- End Select
- End Sub
- Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles MyBase.KeyUp
- Select Case e.KeyValue
- Case Keys.D
- moveRight = False
- Case Keys.S
- moveDown = False
- Case Keys.A
- moveLeft = False
- Case Keys.W
- moveUp = False
- End Select
- End Sub
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- tmrMove.Start()
- End Sub
- Private Sub tmrMove_Tick(sender As Object, e As EventArgs) Handles tmrMove.Tick
- If moveRight = True Then
- yOld = player.Left
- player.Left = player.Left + 5
- xNew = player.Top
- yNew = player.Left
- End If
- If moveDown = True Then
- xOld = player.Top
- player.Top = player.Top + 5
- xNew = player.Top
- yNew = player.Left
- End If
- If moveLeft = True Then
- yOld = player.Left
- player.Left = player.Left - 5
- xNew = player.Top
- yNew = player.Left
- End If
- If moveUp = True Then
- xOld = player.Top
- player.Top = player.Top - 5
- xNew = player.Top
- yNew = player.Left
- End If
- If collision(player, wall) = True Then
- player.Top = xOld
- player.Left = yOld
- End If
- 'Label1.Text = "xOld: " & xOld.ToString & " - yOld: " & yOld.ToString
- 'Label2.Text = "xNew: " & xNew.ToString & " - yNew: " & yNew.ToString
- End Sub
- Private Function collision(ByVal Object1 As Object, ByVal Object2 As Object) As Boolean
- Dim collided As Boolean = False
- If Object1.top + Object1.height >= Object2.top And
- Object2.top + Object2.height >= Object1.top And
- Object1.left + Object1.width >= Object2.left And
- Object2.left + Object2.width >= Object1.left Then
- collided = True
- End If
- Return collided
- End Function
- End Class