e.KeyCode Cooldown / Abklingzeit (?)

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von jedijaeger.

    e.KeyCode Cooldown / Abklingzeit (?)

    Hey,

    bin dabei ein kleines Jump'n'Run zu entwickeln mit Level Editor und Co., soll Geometry Dash und The Impossible Game ähneln. Bin kurz davor eine Demo davon raus zu bringen, allerdings ist mir erst jetzt aufgefallen, das wenn ich mehrmals Leertaste drücke, "schweben" kann. Heißt; wenn ich mehrmals Leertaste drücke springe ich immer höher obwohl ich das garnicht möchte.

    KeyUp-Event:

    Quellcode

    1. If e.KeyCode = Keys.Space Then
    2. timerJump.Start()
    3. End If


    Ich möchte den Code eigentlich so haben, das nachdem ich einmal gedrückt habe, eine Cooldown oder auch Abklingzeit genannt von 1,1 - 1,5 Sekunden habe.

    Weiß da jemand weiter? Google hat mir nicht geholfen...

    LG

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „crashoverride“ ()

    Hallo, ich würde eine Boolean Eigenschaft und die Stopwatch nutzen, nach dem Drücken Stopwatch Starten, Eigenschaft auf False wenn diese Zeit X erreicht hat, Eigenschaft auf True.

    Beim Springen, diese Eigenschaft Abfragen.
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    Ich gehe mal davon aus, dass man mit dem Drücken von Space nur einmal springen kann (also keine "verschachtelte" Springen). Wenn so, dann:

    - Space gedrückt, Springen ausführen
    - solange der Spielfigur kein Boden berührt (also in der Luft is), alle weitere Spaces ignorieren

    Was nützt dir ein Cooldown?

    crashoverride schrieb:

    KeyUp-Event
    Mach Dir mal ein kleines Testprojekt und untersuch das KeyDown-, KeyPress- und das KeyUp-Event mit und ohne e.Cancel auf True zu setzen.
    Informiere Dich auch über AutoRepeat.
    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!
    Hallo,

    ich habe es leichter geregelt. Man drückt ja 'P' zum spielen, und wenn man nun springen möchte, muss das 'spaceCooldownLbl' Visible = False sein.

    Sobald allerdings timerJump aktiviert wird, wird das Label auf Visible = True gesetzt, und am Ende der Timer ist es wieder Visible = False und man kann wieder Leertaste drücken und ich hab meinen Cooldown perfekt gesetzt.

    Trotzdem vielen Dank für die ganzen Antworten. Der Code sieht nun so aus:

    Quellcode

    1. ​If dieTimesLbl1.Visible = True Then
    2. If spaceCooldownLbl.Visible = False Then
    3. If e.KeyCode = Keys.Space Then
    4. timerJump.Start()
    5. End If
    6. End If
    7. End If


    timerJump.Start()

    Quellcode

    1. Private Sub timerJump_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timerJump.Tick
    2. spaceCooldownLbl.Visible = True
    3. timerJumpEnd.Start()
    4. Dim new_location As Point = New Point(characterWürfel.Location.X, characterWürfel.Location.Y - 3)
    5. characterWürfel.Location = new_location
    6. End Sub


    timerJumpEnd.Start()

    Quellcode

    1. Private Sub timerJumpEnd_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timerJumpEnd.Tick
    2. timerJump.Stop()
    3. timerJumpEnd2.Start()
    4. timerJumpEnd.Stop()
    5. End Sub


    timerJumpEnd2.Start()

    Quellcode

    1. Private Sub timerJumpEnd2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timerJumpEnd2.Tick
    2. timerJumpEnd3.Start()
    3. Dim new_location As Point = New Point(characterWürfel.Location.X, characterWürfel.Location.Y + 3)
    4. characterWürfel.Location = new_location
    5. End Sub


    timerJumpEnd3.Start()

    Quellcode

    1. Private Sub timerJumpEnd3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timerJumpEnd3.Tick
    2. timerJumpEnd2.Stop()
    3. spaceCooldownLbl.Visible = False
    4. timerJumpEnd3.Stop()
    5. End Sub


    Klingt alles sehr kompliziert, funktioniert aber, dankeschön!