JavaScript Komisches Verhalten bei Druck auf die Leertaste

RauchenderDachs

Cadet 4th Year
Registriert
Dez. 2012
Beiträge
70
Hi Leute,

ich habe ein kleines Spiel in JS programiert. Wenn man die Leertaste drückt sol der Spieler schießen. Das funktioniert auch allerding verhält sich dann der Spieler (das Bild) und die Gegner,die auf denn Spieler zufliegen, äußerst komisch. Sie verschwinden, tauchen an anderer Stelle wieder auf usw. Unten lass ich euch mal den Code des gesamten Programmes da. Die Tastenabfrage ist ganz unten habe alles mal rausgenommen und nur eine Konsolenausgabe hineingepackt hat aber das gleiche Problem.

Code:
/*jslint browser: true*/
function startup(){

    var main = document.getElementById("main");
    var ctx = main.getContext("2d");
    
    var player = new Image(); //Spieler
    player.src = "img/schiff.gif";
    var playerx = 10;
    var playery = 10;
    
    var bg = new Image(); //Hintergrund
    bg.src = "img/bg.png";
    
    var alien = new Image(); //Aliens
    alien.src = "img/alien.png";
    var alienx = [];
    var alieny = [];
    for(var i = 0;i<10;i++){ //Aliens werden erschaffen
        alienx[i]= Math.round((Math.random()*(2000))+700);
        alieny[i]= Math.round((Math.random()*(388)));
    }
    
    

    function draw(){ //Zeichenmethode
        ctx.clearRect(0,0,700,388); //leeres Rechteck
        
        ctx.drawImage(bg,0,0);//Hintergrund
        
        ctx.drawImage(player,playerx,playery);//spieler
        
        
        for(var i = 0;i<10;i++){//Aliens
            ctx.drawImage(alien,alienx [i],alieny[i]);
        }
        
    }
    
    var is_playing = false;
    function gameloop(){
        window.setTimeout(gameloop,10);
        movealiens();//Aliens bewegen
        draw();
        
    }
    starteloop();
    function starteloop(){
        is_playing = true;
        gameloop();
    }
    function stoploop(){
        is_playing = false;   
    }
    
    document.addEventListener("keydown",key_down,false);
    function key_down(e){
        var key_id = e.keyCode || e.which;
        
        if(key_id == 40 && playery<(388-53)){//hoch
            playery = playery + 2;
        }
        if(key_id == 38 && playery>0){//runter
            playery = playery - 2;
        }
        if(key_id == 32 ){//leertaste
            console.log(1);
        }
        //console.log(key_id);
    }
    function movealiens(){
           for(var i = 0;i<10;i++){
                alienx[i]= alienx [i] - 1;
                
               if(alienx[i] == -60){// Wenn die aliens über den rand hinaus sind von vorne anfangen
                   alienx[i] = Math.round((Math.random()*(2000))+700);;
                   alieny[i] = Math.round((Math.random()*(388)));;
           }
        //console.log(alienx[0]);
    }
    
        
    
    
    
    }
}
 
Das Problem liegt einfach daran das die Gener bei druck auf die Leertaste verschwinden. Ich benutze Firefox. Aber bei Chrome besteht das gleiche Problem. Ich werde das Problem mal aufzeichnen und ein Video hoch laden.
 
Und das Problem besteht auch bei den losen Dateien die du hochgeladen hast? (am besten einfach das Original ohne Veränderungen zippen)
Ich kann auch hier das Problem nicht nachvollziehen, weil console.log(1); sicherlich keine Aliens verschwinden lässt.
Vielleicht hast du auch noch andere Scripte auf der Seite eingebunden?
 
Man kann dir leider nicht helfen, da du den fehlerhaften Teil aus deinem Code entfernt hast.

Lade doch bitte mal das komplette Script ohne gelöschten Teil auf jsfiddle hoch, dann können wir das ganze uns anschauen und dir Hilfestellung leisten.
 
Das Problem liegt in genau diesem Script. Habs mal aufgenommen. Und nochmal ich benutze exakt das oben aufgeführte script.
In diesem Beispiel drücke ich nur ein einziges mal die Leertaste.
 

Anhänge

  • KomischesVerhaltenJavaScript.gif
    KomischesVerhaltenJavaScript.gif
    331,8 KB · Aufrufe: 104
Zuletzt bearbeitet:
RauchenderDachs schrieb:
Das Problem liegt in genau diesem Script. Habs mal aufgenommen. Und nochmal ich benutze exakt das oben aufgeführte script.

Also wenn ich die Scripte runterlade, die du auf mediafire hochgeladen hast, dann funktioniert das Spiel wie gewollt. Bei Leertasten drücken erscheint lediglich eine "1" in der Konsole. Was auch logisch ist. Daher kann das nicht das aktuelle Script sein welches du in der Demo testes.

Deine entfernten Zeilen sind der Knackpunkt wodran es scheitert.
 
Liegt es dann am Browser dass bei mir sich das script anders verhält? Ich habe aber Firefox und Chrome schon duchgetestet.
Nochmal ich habe mein Problem oben aufgenommen und das ist mit denn Dateien die ich auch hochgeladen habe.
 
Bei sowas immer die Standardaktion des Browsers unterbinden. Im Eventcallback e.preventDefault()
 
Danke. Es muss wohl oder übel an Firefox liegen.In Chrome funktioniert jetzt alles super.
 
Zurück
Oben