2017-09-13 3 views
1

Je fais ce jeu (clones d'envahisseurs; https://codepen.io/laughingskull/pen/NaWWzE?editors=0010). Je veux déplacer le vaisseau à gauche et à droite, et quand le contrôle est pressé, le vaisseau tirera. Le problème est quand le contrôle de libération est, le navire arrête de bouger. i ai lier cette fonctionnalité de keydown:Comment continuer l'événement de keydown après que le keyup ait été déclenché

checkKey: function(e) { 
    e = e || window.event; 
    if (e.keyCode in map) { 
     map[e.keyCode] = true; 
     e.preventDefault(); 
     GAME.respond();   
    } 

et ceci à keyUp:

clearKey: function(e) { 
    e = e || window.event; 
    if (e.keyCode in map) { 
     map[e.keyCode] = false; 
    }    
    if (e.keyCode === 17){ 
     GAME.respond(); 
    } 

GAME.respond() ressemble à ceci:

respond: function(){ 
    console.log("map", map); 
    if (map[17]) { 
      SHIP.shoot(); 
     } 
     if (map[37]) { 
      SHIP.move(LEFT); 
      return; 
     } 
     if (map[39]) { 
      SHIP.move(RIGHT); 
      return; 
     } 
     if (map[38]) { 
      SHIP.move(UP); 
      return; 
     } 
     if (map[40]) { 
      SHIP.move(DOWN); 
      return; 
     } 
}, 

touches pressées sont mis en correspondance par l'intermédiaire du objet de la carte (déclaré ailleurs). Le problème survient après le déclenchement de l'événement de touche, même si les touches fléchées sont toujours enfoncées, rien ne se passe. Comment puis-je restaurer les touches suivantes?

+0

Jetez un oeil à l'exemple Phaser.js Invaders, la façon dont son implémentation devrait vous donner un indice sur la façon de faire le vôtre. http://phaser.io/examples/v2/games/invaders – IamSilviu

Répondre

1

Dans la plupart des jeux vus, les touches de mouvement sont placées dans la gameloop. Ce qui signifie qu'il vérifie le keymap chaque boucle et se déplace en conséquence, et vous avez mis vos clés de mouvement en réponse. Une autre chose que je sais est que si vous appuyez sur une touche et la maintenez, il répète la touche, jusqu'à ce que vous appuyez sur une autre touche vers le bas. Ce qui signifie qu'il ne répétera que la dernière touche. Il serait donc préférable que vous vérifiiez l'état dans la boucle au lieu d'un événement.

+0

En effet, c'était la seule chose qui a fonctionné - boucle de jeu. Maintenant, cela fonctionne parfaitement. –