PictureBox in mehrere Richtungen gleichzeitig bewegen

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von X-Zat.

    PictureBox in mehrere Richtungen gleichzeitig bewegen

    Hai, ich programmiere ein kleines Spiel bei dem man eine PictureBox mit den Pfeiltasten steuert. Sie läuft nacht links und rechts und hüpfen kann sie auch (es ist also "Schwerkraft" vorhanden).

    Mein Problem ist jetzt, dass sie zwar hüpft, aber nur nach oben, d.h. sie kann nicht nach links oder rechts hüpfen, außer wenn man immer und immer wieder während des Sprungs die jeweilige Pfeiltaste drückt. Das nervt.
    Außerdem soll man während des Sprungs nicht noch einmal springen können, erst wenn sie wieder "auf dem Boden" ist.
    Um zu springen habe ich 2 timer verwendet, einen um hoch zu kommen und einen damit die pb auch wieder auf den Boden kommt.

    Hier der Code, die PictureBox die sich bewegen soll heißt pb_norbert

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim timercount_up As Integer
    3. Dim timercount_down As Integer
    4. Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    5. If e.KeyCode = Keys.Left Then
    6. pb_norbert.Left = pb_norbert.Left - 3
    7. End If
    8. If e.KeyCode = Keys.Right Then
    9. pb_norbert.Left = pb_norbert.Left + 3
    10. End If
    11. If e.KeyCode = Keys.Up Then
    12. pb_norbert.Top = pb_norbert.Top - 3
    13. timer_up.Enabled = True
    14. End If
    15. End Sub
    16. Private Sub timer_up_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timer_up.Tick
    17. pb_norbert.Top = pb_norbert.Top - 3
    18. If timercount_up = 20 Then timercount_up = 0 : timer_up.Enabled = False : timer_down.Enabled = True
    19. timercount_up += 1
    20. End Sub
    21. Private Sub timer_down_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timer_down.Tick
    22. pb_norbert.Top = pb_norbert.Top + 3
    23. If timercount_down = 21 Then timercount_down = 0 : timer_down.Enabled = False
    24. timercount_down += 1
    25. End Sub
    26. End Class


    Danke.
    Ok...

    Ich habe deinen Text jetzt drei oder vier mal gelesen, und dein Problem is mir nicht wirklich klar geworden:

    Deine PB hüpft auf, wenn du die Pfeil-Nach-Oben-Taste drückst (durch Timer_Up) und fällt wieder, wenn sie ihre maximale Höhe (20) erreicht hat (durch Timer_Down).

    Dein erstes Problem ist nun, dass du nicht nach rechts springen kannst... Dazu müsstest du die Taste immer wiederholt drücken. Dann mach es so:

    Wenn du PNO-Taste und PNR-Taste gedrückt hast, setze eine globale Variable (z.B. moveX) auf einen Wert (z.B. "-3") und starte deinen Timer.
    Im Timer fragst du ab, ob moveX nun < oder > 0 ist - Wenn ja, dann bewege die PB um "moveX" Pixel. Da du ja zunächst hüfpst und danach fällst, ist der letzte aktive Timer "Timer_Down" - In diesem setzt du nun deine moveX-Variable auf 0 zurück.
    Das kannst du dann auch mit der PNL-Taste machen, da dann mit dem natürlich negierten (umgekehrten) Wert (z.B. "3").

    Dein zweites Problemwar nun, dass man nicht noch einmal springen können soll. Das ist einfach:

    Du lässt deine PB ja hüpfen, indem du Timer_Up aktivierst. Frage doch vorher ab, ob Timer_Up ODER Timer_Down bereits aktiv sind. Falls nicht, aktiviere den Timer_Up.

    Ich hoffe, ich konnte dir einigermaßen helfen.

    MfG,
    X-Zat / Momo