2017-07-01 33 views
0

我有一個項目要學習JavaScript。 這是一個簡單的遊戲。你必須從畫布的底部到頂部。 我想在畫布上放置一塊無法穿越的球員,球員需要繞過它。 你能幫我解決這個問題嗎?JavaScript遊戲 - 無法穿越的對象

這是我如何控制播放器

Player.prototype.handleInput = function() { 
    var self = this; 
    console.log(self); 
    document.addEventListener('keyup', function (event) { 
     var keyName = event.which || event.keyCode; 

     switch (keyName) { 
      case true: 
       return self.x = 0, self.y = 0; 


      case 37: 
      case 65: 
      case 100: 
       return self.x -= 20; 

      case 38: 
      case 87: 
      case 104: 
       return self.y -= 20; 

      case 39: 
      case 68: 
      case 102: 
       return self.x += 20; 

      case 40: 
      case 83: 
      case 101: 
       return self.y += 20; 
     } 
    }) 

} 

這是岩石構造

Rock = function(){ 
    this.x = getRandomInt(50, 700); 
    this.y = getRandomInt(50, 400); 
    this.width = 101; 
    this.height = 171; 
} 

我有一個碰撞檢測,以及什麼是從MDN網站

function objectCollision(obj1, obj2) { 
    var rect1 = obj1; 
    var rect2 = obj2; 
    if (rect1.x < rect2.x + rect2.width && 
     rect1.x + rect1.width > rect2.x && 
     rect1.y < rect2.y + rect2.height && 
     rect1.height + rect1.y > rect2.y) { 
     return true; 
    } 
    return false; 
} 

我試圖解決不同的方式,但我無法弄清楚。 當玩家從任何一邊撞到岩石時,我都需要一個解決方案,而不是以這種方式進一步移動。

謝謝

回答

0

在您的keyup事件處理程序,嘗試像現有交換機圍繞以下幾個:

var old_x = self.x; 
    var old_y = self.y; 
    switch (keyName) { 
     ... 
    } 
    for (var i in obstacles) { 
     if (obstacles[i] != self && objectCollision(self, obstacles[i])) { 
      self.x = old_x; 
      self.y = old_y; 
      break; 
     } 
    } 

我假設你有障礙物陣列,而不是隻是一個單一的巖。