2016-03-23 7 views
-1

SorunTuval: Hareket sadece X ekseninde izinli mi?

Sana uzak taşımak zorunda ya da size doğru gelen mermileri atlatmak bir oyun oluşturma

, onlar kontrol ediyor Görüntüyü taşımak için kullanıcı sağladı ama şu anda kullanıcı yerleştirebilirsiniz tuvalin herhangi bir yerinde görüntü.

nasıl sadece kullanıcı tuval belirlenen kısmı boyunca ve sadece X ekseni boyunca hareket etmesine izin verebilir Soru? örneğin:

enter image description here kullanıcı geminin kontrol altında

, sadece taşımak gerekir sola veya sağa örneğin böyle: Burada

oyunum, "ilerleme çalışma" dir:

enter image description here

Kod

<script> 
    var game = create_game(); 
    game.init(); 

    //music 
    var snd = new Audio("menu.mp3"); 
    snd.play(); 
     document.getElementById('mute').addEventListener('click', function (evt) { 
     if (snd.muted) { 
      snd.muted = false 
      evt.target.innerHTML = 'mute' 
     } 
     else { 
      snd.muted = true 
      evt.target.innerHTML = 'unmute' 
     } 
    }) 

    function create_game() { 
     debugger; 
     var level = 1; 
     var projectiles_per_level = 1; 
     var min_speed_per_level = 1; 
     var max_speed_per_level = 2; 
     var last_projectile_time = 0; 
     var next_projectile_time = 0; 
     var width = 600; 
     var height = 500; 
     var delay = 1000; 
     var item_width = 30; 
     var item_height = 30; 
     var total_projectiles = 0; 
     var projectile_img = new Image(); 
     var projectile_w = 30; 
     var projectile_h = 30; 
     var player_img = new Image(); 
     var c, ctx; 

     var projectiles = []; 
     var player = { 
      x: 200, 
      y: 400, 
      score: 0 
     }; 

     function init() { 
      projectile_img.src = "apple.png"; 
      player_img.src = "basket.png"; 

      level = 1; 
      total_projectiles = 0; 
      projectiles = []; 

      c = document.getElementById("c"); 
      ctx = c.getContext("2d"); 
      ctx.fillStyle = "#ff6600"; 
      ctx.fillRect(0, 0, 500, 600); 

      c.addEventListener("mousemove", function (e) { 
       //moving over the canvas. 
       var bounding_box = c.getBoundingClientRect(); 
       player.x = (e.clientX - bounding_box.left) * (c.width/bounding_box.width) - player_img.width/2; 
       player.y = (e.clientY - bounding_box.top) * (c.height/bounding_box.height) - player_img.height/2; 
      }, false); 

      setupProjectiles(); 
      requestAnimationFrame(tick); 
     } 

     function setupProjectiles() { 
      var max_projectiles = level * projectiles_per_level; 
      while (projectiles.length < max_projectiles) { 
       initProjectile(projectiles.length); 
      } 
     } 

     function initProjectile(index) { 
      var max_speed = max_speed_per_level * level; 
      var min_speed = min_speed_per_level * level; 
      projectiles[index] = { 
       x: Math.round(Math.random() * (width - 2 * projectile_w)) + projectile_w, 
       y: -projectile_h, 
       v: Math.round(Math.random() * (max_speed - min_speed)) + min_speed, 
       delay: Date.now() + Math.random() * delay 
      } 
      total_projectiles++; 
     } 

     function collision(projectile) { 
      if (projectile.y + projectile_img.height < player.y + 74) { 
       return false; 
      } 
      if (projectile.y > player.y + 74) { 
       return false; 
      } 
      if (projectile.x + projectile_img.width < player.x + 177) { 
       return false; 
      } 
      if (projectile.x > player.x + 177) { 
       return false; 
      } 

      return true; 
     } 

     function maybeIncreaseDifficulty() { 
      level = Math.max(1, Math.ceil(player.score/10)); 
      setupProjectiles(); 
     } 

     function tick() { 
      var i; 
      var projectile; 
      var dateNow = Date.now(); 
      c.width = c.width; 
      for (i = 0; i < projectiles.length; i++) { 
       projectile = projectiles[i]; 
       if (dateNow > projectile.delay) { 
        projectile.y += projectile.v; 
        if (collision(projectile)) { 
         initProjectile(i); 
         player.score++; 
        } else if (projectile.y > height) { 
         initProjectile(i); 
        } else { 
         ctx.drawImage(projectile_img, projectile.x, projectile.y); 
        } 
       } 
      } 
      ctx.font = "bold 24px sans-serif"; 
      ctx.fillStyle = "#ff6600"; 
      ctx.fillText(player.score, c.width - 50, 50); 
      ctx.fillText("Level: " + level, 20, 50); 

      ctx.drawImage(player_img, player.x, player.y); 
      maybeIncreaseDifficulty(); 
      requestAnimationFrame(tick); 
     } 

     return { 
      init: init 
     }; 
    }   

</script> 

JSFiddle(Broken)

https://jsfiddle.net/3oc4jsf6/10/

cevap

3

geminiz Fare hareketine bağlı ve sadece basitçe onun .y özelliğini değiştirerek önleyebilirsiniz X ekseni boyunca hareket izin vermek istediğiniz takdirde mousemove dinleyicinizde.

player.y = (e.clientY - bounding_box.top) * (c.height/bounding_box.height) - player_img.height/2; 
+0

Parlak teşekkür ederim:

bu satırı kaldırın! – RushFan2112