2017-07-01 34 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; 
     } 
    } 

我假设你有障碍物阵列,而不是只是一个单一的岩。