2016-09-29 2 views
-3

Pour voir un exemple de travail il suffit de copier le code dans notepad ++ et de le lancer en chrome sous forme de fichier .html, j'ai eu du mal à trouver un exemple de code donné un lien vers ces sites si je pouvais le faire fonctionner en eux.JavaScript - Arrêter le laser une fois dans son cycle d'incrémentation

La question est; une fois que je tire le laser une fois qu'il se comporte exactement comme je le veux. Il s'incrémente avec lzxR ++; jusqu'à ce que je frappe la barre d'espace MAIS si je frappe la barre d'espace alors que le laser se déplace le code itère à nouveau et essaie d'afficher le laser dans deux endroits à la fois qui semble mauvais et très saccadé, alors comment je peux le faire fonctionner donc si je frappe la barre d'espace une deuxième fois alors que le laser était en mi-incrémentation - il arrête l'incrémentation et tire simplement un nouveau laser frais sans essayer d'incrémenter plusieurs lasers à la fois ???

Voici le code:

<html> 

<head> 
    <style> 
     #blueCanvas { 
      position: absolute; 
      background-color: black; 
      width: 932px; 
      height: 512px; 
      border: 1px solid black; 
      top: 20px; 
      left: 20px; 
     } 

     #blueBall { 
      position: relative; 
      background-color: white; 
      border: 1px solid blue; 
      width: 10px; 
      height: 10px; 
      border-radius: 100%; 
      top: 0px; 
      left: 0px; 
     } 

     #laser { 
      position: absolute; 
      background-color: white; 
      border: 1px solid blue; 
      width: 10px; 
      height: 1px; 
      top: 10px; 
      left: 10px; 
     } 

     #pixelTrackerTop { 
      position: absolute; 
      top: 530px; 
      left: 20px; 
     } 

     #pixelTrackerLeft { 
      position: absolute; 
      top: 550px; 
      left: 20px; 
     } 
    </style> 

    <title>Portfolio</title> 
    <script src="https://ajax.googleapis.com/ 
    ajax/libs/jquery/1.12.4/jquery.min.js"> 
    </script> 
    <SCRIPT LANGUAGE="JavaScript" type="text/javascript"> 
     document.addEventListener("keydown", keyBoardInput); 
     var topY = 0; 
     var leftX = 0; 
     var lzrY = 0; 
     var lzrX = 0; 

     function moveUp() { 
      var Y = document.getElementById("blueBall"); 
      topY = topY -= 1; 
      Y.style.top = topY; 
      masterTrack(); 
      if (topY < 1) { 
       topY = 0; 
       Y.style.top = topY; 
      }; 
      stopUp = setTimeout("moveUp()", 1) 
       /**allows for progression of speed with additional key strokes**/ 
      topStop(); 
      stopConflictYup(); 
      console.log('moveUp'); 
     }; 

     function moveDown() { 
      var Y = document.getElementById("blueBall"); 
      topY = topY += 1; 
      Y.style.top = topY; 
      masterTrack(); 
      if (topY > 500) { 
       topY = 500; 
       Y.style.top = topY; 
      }; 
      stopDown = setTimeout("moveDown()", 1) 
       /**allows for progression of speed  with additional key strokes**/ 
      topStop(); 
      stopConflictYdown(); 
      console.log('moveDown'); 
     }; 

     function moveLeft() { 
      var X = document.getElementById("blueBall"); 
      leftX = leftX -= 1; 
      X.style.left = leftX; 
      masterTrack(); 
      if (leftX < 1) { 
       leftX = 0; 
       Y.style.leftX = leftX; 
      }; 
      stopLeft = setTimeout("moveLeft()", 1) 
       /**allows for progression of speed with additional key strokes**/ 
      leftStop(); 
      stopConflictXleft(); 
      console.log('moveLeft'); 
     }; 

     function moveRight() { 
      var X = document.getElementById("blueBall"); 
      leftX = leftX += 1; 
      X.style.left = leftX; 
      masterTrack(); 
      if (leftX > 920) { 
       leftX = 920; 
       Y.style.leftX = leftX; 
      }; 
      stopRight = setTimeout("moveRight()", 1) 
       /**allows for progression of speed with additional key strokes**/ 
      leftStop(); 
      stopConflictXright(); 
      console.log('moveRight'); 
     }; 

     function masterTrack() { 
      var pxY = topY; 
      var pxX = leftX; 
      document.getElementById('pixelTrackerTop').innerHTML = 
       'Top position is ' + pxY; 
      document.getElementById('pixelTrackerLeft').innerHTML = 
       'Left position is ' + pxX; 
     }; 

     function topStop() { 
      if (topY <= 0) { 
       clearTimeout(stopUp); 
       console.log('stopUp activated'); 
      }; 
      if (topY >= 500) { 
       clearTimeout(stopDown); 
       console.log('stopDown activated'); 
      }; 
     }; 

     function leftStop() { 
      if (leftX <= 0) { 
       clearTimeout(stopLeft); 
       console.log('stopLeft activated'); 
      }; 
      if (leftX >= 920) { 
       clearTimeout(stopRight); 
       console.log('stopRight activated'); 
      }; 
     }; 

     function stopConflictYup() { 
      clearTimeout(stopDown); 
     }; 

     function stopConflictYdown() { 
      clearTimeout(stopUp); 
     }; 

     function stopConflictXleft() { 
      clearTimeout(stopRight); 
     }; 

     function stopConflictXright() { 
      clearTimeout(stopLeft); 
     }; 

     function shootLaser() { 
      var l = document.getElementById("laser"); 
      var lzrY = topY; 
      var lzrX = leftX; 
      fireLaser(); 

      function fireLaser() { 
       l.style.left = lzrX; /**initial x pos **/ 
       l.style.top = topY; /**initial y pos **/ 
       var move = setInterval(moveLaser, 1); 
       /**continue to increment laser unless IF is met**/ 
       function moveLaser() { /**CALL and start the interval**/ 
        var bcrb = document.getElementById("blueCanvas").style.left; 
        if (lzrX > bcrb + 920) { 
         /**if the X axis of the laser goes beyond the 

           blueCanvas 0 point by 920 then stop incrementing the laser on its X 

           axis**/ 
         clearInterval(move); 
         /**if statement was found true so stop increment of laser**/ 
        } else { 
         lzrX++; 
         l.style.left = lzrX; 
        }; 
       }; 
      }; 
     }; 

     function keyBoardInput() { 
      var i = event.keyCode; 
      if (i == 32) { 
       shootLaser(); 
      }; 
      if (i == 38) { 
       if (topY > 0) { 
        moveUp(); 
       }; 
      }; 
      if (i == 40) { 
       if (topY < 500) { 
        moveDown(); 
       }; 
      }; 
      if (i == 37) { 
       if (leftX > 0) { 
        moveLeft(); 
       }; 
      }; 
      if (i == 39) { 
       if (leftX < 920) { 
        moveRight(); 
       }; 
      }; 
     }; 
     /** 

    !! gradual progression of opacity is overall 
    !! being able to speed up element is best done with setTimout 
    !! setInterval is constant regards to visual speed 
    !! NEXT STEP IS ARRAYS OR CLASSES 
    IN ORDER TO SHOOT MULITPLE OF SAME  ELEMENT? MAYBEE? 


    var l = document.getElementById("laser"); 
    lzrX = lzrX += 1; 
    l.style.left = lzrX; 
    lzrY = topY += 1; 
    l.style.top = lzrY; 
    **/ 
    </SCRIPT> 

</head> 

<div id="blueCanvas"> 
    <div id="laser"></div> 
    <div id="blueBall"> 

    </div> 
</div> 

<p id="pixelTrackerTop">Top position is 0</p> 
<br> 
<p id="pixelTrackerLeft">Left position is 0</p> 

</body> 

</html> 
+1

S'il vous plaît ne postez le code pertinent sur votre question au lieu d'un mur de code géant. –

+1

Voici un JSFiddle: https://jsfiddle.net/b956xqxt/ - Accordé, je n'ai aucune idée de ce que je regarde. – Santi

+1

^Le "mur géant de code" est le "jeu" complet jusqu'à présent, permettant à l'utilisateur de voir exactement comment cela fonctionne. Omettre quoi que ce soit serait contraire. – Illdapt

Répondre

0

Résolu le problème avec l'aide d'une variable appelée « g » et incrémenter une fois est tiré le laser!

var g = 0; 
function keyBoardInput() { 
var i = event.keyCode; 


    if (i == 32) { 
    if (g < 1) { 
    shootLaser(); 
    g++; 
    }; 


    };