Gleichzeitige KeyEvents = Problem

  • 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:,

    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 :(

    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.

  • 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 ;)

    Mfg, LB


    Trading for a living [equities,futures,forex]

  • //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!

  • ich würds über polling machen:

    bool move_left = false;
    bool spacepressed = false;

    so sollte das schon funken.

  • 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.

  • 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

  • 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 ;)

  • 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 ;)

    ah geh, mortal cowbat ist auch so genial :)

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

Jetzt mitmachen!

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