1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Gleichzeitige KeyEvents = Problem

  • AntiBit
  • 29. Juni 2004 um 01:05
  • Unerledigt
  • AntiBit
    13
    AntiBit
    Mitglied
    Reaktionen
    2
    Punkte
    1.712
    Beiträge
    297
    • 29. Juni 2004 um 01:05
    • #1

    Hi, ich hätte da mal ein dummes Problem.
    Man stelle sich ein Spiel vor... nehmen wir Bomberman als Beispiel. Solang ich den rechten Arrow-Key gedrückt halte läuft ja mein Maxl nach rechts. Nun soll jetzt aber auch WÄHREND ich den rechten Arrow gedrückt halte (und das Maxl läuft) mittels eines kurzen Drucks auf Space eine Bombe gelegt werden.
    Mein Problem ist jetzt dass sobald ich Space drücke, dieser KeyEvent den des Arrows überschreibt. Heisst: es wird eine Bombe gelegt, aber das Maxl stoppt und läuft nicht mehr weiter.

    Ich habe das zur Zeit so implementiert:,

    Code
    public void keyPressed(java.awt.event.KeyEvent keyEvent)
        {        
            if(keyEvent.getKeyCode() == KeyEvent.VK_RIGHT)
                sprite.moveRight();
            else if(keyEvent.getKeyCode() == KeyEvent.VK_LEFT)
                sprite.moveLeft();
            else if(keyEvent.getKeyCode() == KeyEvent.VK_UP)
                sprite.moveUp();
            else if(keyEvent.getKeyCode() == KeyEvent.VK_DOWN)
                sprite.moveDown();
    
            if(keyEvent.getKeyCode() == KeyEvent.VK_SPACE)
            {
               System.out.println("SPACE");
               // Maxl rennt nicht mehr weiter :(
            }
    Alles anzeigen

    Hat sich schon mal jemand mit gleichzeitigen Key-Press'es beschäftigt? Wie handelt man sowas?
    Mein Versuch war nach dem Space-Press das hier einzufügen:

    robot.keyPress(lastkey.getKeyCode());

    Hilft aber nix :frowning_face:

    mfg,
    AntiBit

    Hätten uns Spiele wie Pac-Man in unserer Jugend beeinflusst, würden wir heute durch dunkle Räume irren, elektronische Musik hören und Pillen fressen.

  • Lord Binary
    18
    Lord Binary
    Mitglied
    Reaktionen
    11
    Punkte
    3.301
    Beiträge
    647
    • 29. Juni 2004 um 01:41
    • #2

    Naja, ein möglicher workaround (von vielen) wär states einzuführen.

    Runningstate: IN den l/r running state kommt man nur durch drücken von l/r.
    IM l/r running state bleibt man durch l/r oder space.
    Verlassen des l/r running states: Nicht (l/r key\{space}).
    If (in l/r running state & space) bomb;

    Oder so ähnlich, ist schon spät :winking_face:

    Mfg, LB


    Trading for a living [equities,futures,forex]

  • thebigMuh
    2
    thebigMuh
    Mitglied
    Punkte
    40
    Beiträge
    8
    • 29. Juni 2004 um 01:43
    • #3

    //unqualifizierte Antwort, da recht wenig mit Java programmiert bisher, aber:

    Schon mal mit sowas wie keyDown und keyUp probiert? Die sollten eigentlich alle events abfangen. Mußt dann halt deinen eigenen Status mitführen, welche keys gedrückt sind.

    Ciao, ¡muh!

  • bimbo
    15
    bimbo
    Mitglied
    Reaktionen
    15
    Punkte
    2.320
    Beiträge
    390
    • 29. Juni 2004 um 08:59
    • #4

    ich würds über polling machen:

    bool move_left = false;
    bool spacepressed = false;

    Code
    public void keyPressed(java.awt.event.KeyEvent keyEvent)
        {        
            if( keyEvent.getID== keyEvent.KEY_PRESSED)
            {
              if(keyEvent.getKeyCode() == KeyEvent.VK_LEFT)
                 move_left = true;
              else ...
            }
            if( keyEvent.getID== keyEvent.KEY_RELEASED)
            {
              if(keyEvent.getKeyCode() == KeyEvent.VK_LEFT)
                 move_left = false;
              else ...
            }
    Alles anzeigen

    so sollte das schon funken.

    LVA Erfahrungsberichte: http://vowi.fsinf.at/

  • AntiBit
    13
    AntiBit
    Mitglied
    Reaktionen
    2
    Punkte
    1.712
    Beiträge
    297
    • 29. Juni 2004 um 10:38
    • #5

    Danke für die Tipps!
    Mit Threads und boolean-states hab ich das jetzt irgendwie hinbekommen :)

    mfg,
    AntiBit

    Hätten uns Spiele wie Pac-Man in unserer Jugend beeinflusst, würden wir heute durch dunkle Räume irren, elektronische Musik hören und Pillen fressen.

  • michi204
    26
    michi204
    Mitglied
    Reaktionen
    63
    Punkte
    7.268
    Beiträge
    1.318
    • 29. Juni 2004 um 10:50
    • #6

    diesem problem begegnet man in größeren spielen auf der windows-plattform teilweise mit directinput. für "normale" programmierer gibt es api-aufrufe, die synchron den aktuellen status einer taste abrufen. da können dann auch mehrere tasten gleichzeitig gedrückt sein:

    GetKeyState()
    GetAsyncKeyState()

    in user32.dll wenn mich nicht alles täuscht..

    lg michi

  • wolk
    11
    wolk
    Mitglied
    Punkte
    1.290
    Beiträge
    207
    • 29. Juni 2004 um 12:32
    • #7

    das ist natürlich der allerbeste weg (für windows) um komplexere spiele zu programmieren

    das hätte ich bei meinem spiel auch schon gebraucht (mortal combat klon)
    da dort bei 2 spielern ziemlich viele tasten zur gleichen zeit gedrückt wurden :winking_face:

  • Chris
    5
    Chris
    Mitglied
    Punkte
    225
    Beiträge
    45
    • 1. Juli 2004 um 00:09
    • #8
    Zitat von wolk

    das hätte ich bei meinem spiel auch schon gebraucht (mortal combat klon)
    da dort bei 2 spielern ziemlich viele tasten zur gleichen zeit gedrückt wurden :winking_face:

    ah geh, mortal cowbat ist auch so genial :)

    hi, i'm a signature virus. copy me into your signature to help me spread.

  • wolk
    11
    wolk
    Mitglied
    Punkte
    1.290
    Beiträge
    207
    • 1. Juli 2004 um 08:24
    • #9

    jo wenns fertig gmoch gworden wäre :loudly_crying_face:

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung