Ergebnis 1 bis 3 von 3
  1. #1
    Avatar von Transformator
    Transformator ist offline Doppel-As
    registriert
    30-09-2013
    Beiträge
    144

    [JAVASCRIPT] 2 KeyEvents auf einmal localisieren

    Hey!

    Wie vielleicht schon einige von euch schon bemerkt haben (indem sie andere Posts von mir gelesen haben) programmiere ich gerade ziemlich viele verschiedene JavaScript-Canvas Spiele. Bei diesen Spielen kann der Spieler dann durch Tastendruck (meistens die Pfeiltasten) das Spiel steuern.

    Dafür habe ich eine Variable erstellt und diese "keystate" gennant. Immer wenn ein Spieler eine Taste drück wird in diese Variable (Array) ein Element mit dem Keycode auf "true" gesetzt. Der Code dafür war folgendermaßen:

    Code:
    //setzen der keycodes
    keystate = {};
    document.addEventListener("keydown", function(evt) {
    	keystate[evt.keyCode] = true;
    });
    //abfragen
    //...in einem loop
    if(keystate[32]) { // SPACE
      // do something;
    }
    keystate = {};
    Nun Gibt es mehrere Probleme damit.

    Nummer 1: wenn man zwei Tasten gleichzeitig drückt steht in meinem Array nur die zuletzt gedrückte Taste.

    Nummer 2: wenn man eine Taste nicht einmal kurz drückt sondern gedrückt hält, ist der Keycode keinesfalls immer auf "true" sondern verhält sich folgendermaßen:

    Code:
    // alle 150 Millisekunden
    {32: true}
    {32: false}
    {32: false}
    {32: false}
    {32: false}
    {32: false}
    {32: true}
    {32: true}
    {32: true}
    // ... ab jetzt immer true
    Es scheint so, als ob mein Firefox das Tastendrücken "smooth" machen will oder so.

    Die Frage ist, wie kann ich das alles fixen? (das 1. Problem ist das wichtigste)
    Dummheit ist zum Glück (noch) nicht Strafbar
    http://strawpoll.me/1591634

  2. #2
    Avatar von xorg1990
    xorg1990 ist offline König
    registriert
    19-12-2013
    Beiträge
    840

    AW: [JAVASCRIPT] 2 KeyEvents auf einmal localisieren

    Hi,

    Zitat Zitat von Transformator
    Nummer 1: wenn man zwei Tasten gleichzeitig drückt steht in meinem Array nur die zuletzt gedrückte Taste.
    Das kann nicht sein, wenn man 3 Tasten Gleichzeit drück dann sind in deinem Array auch 3 Tasten abgelegt. Allerdings sind die Keycodes immer der Größe nach sortiert warum weiß ich auch nicht.


    Zitat Zitat von Transformator
    Nummer 2: wenn man eine Taste nicht einmal kurz drückt sondern gedrückt hält, ist der Keycode keinesfalls immer auf "true" sondern verhält sich folgendermaßen:
    Ich kann nirgens feststellen woher das false kommen soll.
    Du weist ja immer als value nur true zu:
    keystate[evt.keyCode] = true;

    Schau mal das an, das verdeutlicht es besser:
    Code:
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/html">
    
    <head>
        <title>keystate</title>
    
    </head>
    
    <body>
        <p id="ausgabe"></p>
    
        <script type="text/javascript">
    var keystate = {};
    document.addEventListener("keydown", function(evt) {
    	keystate[evt.keyCode] = true;
             printKeys();
    });
    
    document.addEventListener("keyup", function(evt) {
    	keystate[evt.keyCode] = false;
             printKeys();
    });
    
    function  printKeys (){
        var html = "";
        for (var i in keystate) {
           if (!keystate.hasOwnProperty(i)) continue;
           html +=  i + "&nbsp;" + keystate[i] + "<br>" ;
        }
         document.getElementById("ausgabe").innerHTML=html;
    }
    
        </script>
    </body>
    </html>

  3. #3
    Avatar von Transformator
    Transformator ist offline Doppel-As
    registriert
    30-09-2013
    Beiträge
    144

    AW: [JAVASCRIPT] 2 KeyEvents auf einmal localisieren

    Danke!

    Allerdings gibt es einen Unterschied in unserem Code, ich habe mir ziemlich den Kopf eingeschlagen, als ich gemerkt habe, das Mein Event nicht dann resetet wird, wenn der Button losgelassen wird, sondern alle 50 Millisekunden (jeden Frame). Das war mal wieder einer dieser Idiotischen Fehler
    Dummheit ist zum Glück (noch) nicht Strafbar
    http://strawpoll.me/1591634

Ähnliche Themen

  1. JavaScript einmal geladen, dann im Broswer Cache?
    Von petz_e im Forum JavaScript
    Antworten: 10
    Letzter Beitrag: 23-02-2011, 13:37
  2. Javascript- einmal nur
    Von RRSV im Forum JavaScript
    Antworten: 4
    Letzter Beitrag: 30-09-2009, 17:25
  3. Problem mit Keyevents in Opera
    Von Mr. Snoot im Forum JavaScript
    Antworten: 12
    Letzter Beitrag: 31-08-2009, 23:34
  4. Attribut wird einmal gesetzt, einmal nicht
    Von Generic1 im Forum JavaScript
    Antworten: 5
    Letzter Beitrag: 20-07-2009, 13:25
  5. Noch einmal anderes: Bild speichern per Javascript
    Von stiffler im Forum JavaScript
    Antworten: 7
    Letzter Beitrag: 28-10-2007, 14:40

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •