Stickman soll beim springen wenn boden stehenbleiben

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Stickman soll beim springen wenn boden stehenbleiben

    Hi ich habs das Springen mit Timer gemacht

    Naja zuerst hab ich es so mit der Wand gemacht

    VB.NET-Quellcode

    1. Private Sub Checkwand_Tick(sender As Object, e As EventArgs) Handles Checkwand.Tick
    2. If Stickmanlinks.Left <= Wand1.Right Then
    3. glinks.Enabled = False
    4. Stickmanlinks.Left = Stickmanlinks.Left + 2
    5. End If
    6. End Sub


    Glinks steht fürs nach links gehen.

    Dann wollte ich dasselbe auch mit dem Sprung machen aber ich kanns nicht wirklich programmieren kann mir jemand helfen?


    Wenn man Pfeiltaste nach oben drückt aktiviert sich der Jump1 Timer und jump2ausmacher

    VB.NET-Quellcode

    1. Private Sub Jump1_Tick(sender As Object, e As EventArgs) Handles Jump1.Tick
    2. Stickmanlinks.Top = Stickmanlinks.Top - 2
    3. Stickmanrechts.Top = Stickmanrechts.Top - 2
    4. End Sub
    5. Private Sub Jump2_Tick(sender As Object, e As EventArgs) Handles Jump2.Tick
    6. Stickmanlinks.Top = Stickmanlinks.Top + 1
    7. Stickmanrechts.Top = Stickmanrechts.Top + 1
    8. End Sub
    9. Private Sub Jumpcheck_Tick(sender As Object, e As EventArgs) Handles Jumpcheck.Tick
    10. Jump1.Enabled = False
    11. Jump2.Enabled = True
    12. Jumpcheck.Enabled = False
    13. End Sub
    14. Private Sub Jump2ausmacher_Tick(sender As Object, e As EventArgs) Handles Jump2ausmacher.Tick
    15. If Stickmanlinks.Bottom Or Stickmanrechts.Bottom <= Boden1.Top Then
    16. Jump2.Enabled = False
    17. Jump2ausmacher.Enabled = False
    18. End If


    Da ich das nicht erklären kann musste ich ein Video machen :
    https://youtu.be/hDa6YzWtsqw

    Wie mache ich es so das der beim boden stehen bleibt
    Sry das es ein bssl laggt wollte 1080p aufnehmen :D
    @PlyfexHD Hör auf zu programmieren und überleg Dir zunächst eine Philosophie, die all das bescheibt.
    Du musst natürlich wissen, wo ist Deine Figur und Du musst wissen, wo der Rand ist.
    Du weißt nicht, wo der Boden ist, deswegen sinkt er ein.
    Wenn Boden = -42, dann darf Figur.Bottom nicht kleiner als -41 werden können.
    Wenn Decke = 13, dann darf Figut.Top nicht größer als 12 werden können.
    Und:
    Da die Figur nicht gleichzeitig nach links und nach rechts kann, enumeriere alle möglichen Richtungen:

    VB.NET-Quellcode

    1. Enum Direction
    2. Top
    3. TopLeft
    4. TopRight
    5. Left
    6. Right
    7. BottomLeft
    8. BottomRight
    9. Bottom
    10. End Enum
    oder so. Und dann wähle die richtige davon aus.
    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).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich habe mehrere Anläufe gebraucht um dein Aliegen zu verstehen, vorallem den Titel, aber okay: Dann mal ran an den Speck!

    Zunächst schließe ich mich @RodFromGermany an. Du musst natürlich wissen, wo sich dein Boden befindet, bei dem gestoppt werden soll.
    Dazu gibt es aber unzählige Tutorials mit Demo-Anwendungen, Code-Schnippseln, Erklärungen und Co. Das muss hier nicht nochmal intensiv
    vertieft werden.
    Hier mal ein paar Links, durch die du dich durchlesen solltest:
    - GameTiles & UI (Windows Forms)
    - Postions-Abfrage & mehr (YouTube-Beispiel anhand von FlappyBird)
    - Ausführlicher Spiele-Entwicklungskurs für VB-Spiele
    - Kollisionen & vieles mehr (YouTube-Beispiel anhand von SnakeGame)
    - Location eines Controls abfangen
    - noch vieeeeele Links mehr.....

    MFG
    Bitte benutze OPTION STRICT ON.
    Und optional OPTION EXPLICIT ON.
    Hier ein CODE-CONVERTER.

    Suchanfragen-Ansatz für GOOGLE.
    Prüfe deinen Beitrag in einer RECHTSCHREIBPRÜFUNG.

    PlyfexHD schrieb:

    If Stickmanlinks.Bottom Or Stickmanrechts.Bottom <= Boden1.Top Then
    das ist inhaltlich falsch. Wenn, dann

    VB.NET-Quellcode

    1. If Stickmanlinks.Bottom <= Boden1.Top Or Stickmanrechts.Bottom <= Boden1.Top
    Und statt Or und And besser OrElse und AndAlso.
    Wie RfG schon meinte: das Grundsatzproblem ist, dass Du keine passende Modellierung hast. Kenn ich von früher. Hab ich auch gemacht. Endet im Gefühl, dass man keine Übersicht mehr hat und nicht mehr weiß, wo man was ändern muss. Denn stell Dir vor, dass noch 10 andere bewegliche Figuren (KI) ins Bild kommen. für jeden mehrere Timer? Nope. Außerdem ist Dein Sprungcode nicht realistisch - falls relevant. Effektiv braucht es nur einen einzigen Timer, indem alles passiert. Und zwar wird in dem aufgerufen, dass sich alle Figuren nach ihrer aktuellen Situation bewegen. Nicht mehr, nicht weniger. Eine Art Physiktimer. Da heißt es dann nur: "Alle Figuren: Prüft Euren Bewegungsstatus!". Jede Figur schaut dann z.B. für sich, ob sie gerade noch springt. Mithilfe der Berechnung der Beschleunigung unter Einbeziehung der Gravitation kann man dann problemlos die y-Position ausrechnen - und ggf. noch sagen: Ok, die Figur ist auf dem Boden gelandet, sie kann nicht tiefer einsinken, y-Koordinate bleibt, Sprung beendet. Wobei letzteres nur ggf. relevant ist, da ein Sprungflag m.E. gar nicht nötig ist. Aber das wird gerade alles etwas viel.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.