Zurücksetzen eines Labels

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Zurücksetzen eines Labels

    Hallo,
    Ich fange gerade mit Visual Basic an und versuche einen Space Invaders Abklatsch zu programmieren. Ich hab nur das Problem, dass ich den Schuss (also das abgeschossene Label) nicht zurücksetzten kann. Ich will es nämlich wieder auf den Startpunkt bringen, bei dem es abgeschossen wurde.
    Habe dazu nichts im Internet gefunden, was funktioniert. Danke schon einmal im vorraus!

    Hier ist der Code, wo die Bewegung stattfindet:

    VB.NET-Quellcode

    1. Dim leftt As Boolean
    2. Dim rightt As Boolean
    3. Dim shot1 As Boolean
    4. Private Sub tmrmove_Tick(sender As Object, e As EventArgs) Handles tmrmove.Tick
    5. If leftt = True Then
    6. Player.Left = Player.Left - 3
    7. If shot1 = False Then
    8. schuss1.Left = schuss1.Left - 3
    9. End If
    10. End If
    11. End If
    12. If rightt = True Then
    13. Player.Left = Player.Left + 3
    14. If shot1 = False Then
    15. schuss1.Left = schuss1.Left + 3
    16. End If
    17. End If
    18. moveshot()
    19. End Sub
    20. #End Region
    21. #Region "Tastendruck"
    22. Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
    23. If e.KeyValue = Keys.A Then
    24. leftt = True
    25. End If
    26. If e.KeyValue = Keys.D Then
    27. rightt = True
    28. End If
    29. If e.KeyValue = Keys.Space Then
    30. shot1 = True
    31. Else
    32. End If
    33. End Sub
    34. Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp
    35. If e.KeyValue = Keys.A Then
    36. leftt = False
    37. End If
    38. If e.KeyValue = Keys.D Then
    39. rightt = False
    40. End If
    41. If e.KeyValue = Keys.Space Then
    42. shot1 = True
    43. If shot1 = True Then
    44. schuss1.Top = schuss1.Top - 5
    45. Else
    46. ' hier sollte der Reset stattfinden
    47. End If
    48. End if
    49. End Sub
    50. Private Sub moveshot()
    51. If shot1 = True Then
    52. schuss1.Top = schuss1.Top - 3
    53. End If
    54. End Sub
    Laut Deinem Code soll das Label zurückgesetzt werden, wenn man Space loslässt. Ist das gewollt? Außerdem hättest Du nur ein Projektil.
    Der Reset soll ja wohl einfach nur schuss1.top auf Player.top setzen, richtig? Schau Dir mal Zeile#65 und #67 an. Dann weißt Du auch warum ein Reset niemals eintritt.

    ##########

    Da Du erst anfängst, willst Du Dich an diesem Projekt an die Feinheiten der Programmierung rantasten und daran lernen, richtig? Ich frag nur deshalb, weil das bisherige Konstrukt sehr schnell sehr ... einschränkend wird. Das heißt, wenn Du das in vollen Zügen zum Laufen bringen willst, müsstest Du immer wieder Großteile Deines Codes über Bord werfen. Allerdings wäre die Alternative, Dich mit Vorgehen in Kontakt zu bringen, die Dir möglicherweise etwas die Lust am Programmieren vergehen lassen, da noch einiges zu tun wäre - Stichwort Trennung von GUI & Daten, und Objektorientierung.

    btw: Du hast den Thread schon auf "erledigt" gesetzt? Trifft das zu, dass das Problem erledigt ist?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()

    @VaporiZed Jou.

    TastyBoba schrieb:

    Hier ist der Code, wo die Bewegung stattfindet
    Du hast eine Variable für Links und eine für rechts.
    Da eine Bewegung nicht gleichzeitig nach links und rechts gehen kann, solltest Du Dir überlegen, ob das ganze nicht besser statt zweier Boolean mit einer Enum-Variable gelöst werden kann: Stop, Left, Right.
    Und nach einem Schuss solltest Du die Variable shot1 wieder auf False setzen.
    Um zu überprüfen, was da ühaupt abläuft, solltest Du ggf. Deine Zustände permanent in die Console ausgeben.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!