2017-07-01 5 views
0

私はJavaScriptを学ぶようにプロジェクトを持っています。 これは簡単なゲームです。あなたはキャンバスの底から上に行く必要があります。 私はキャンバスに岩を置いて、交差できず、プレーヤーがそれを回る必要があります。 この問題の解決方法を教えてください。JavaScriptゲーム - 交差できないオブジェクト

これはこれは、岩のコンストラクタ

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; 
} 

あるものだけでなく、衝突検出を持って、私はプレーヤーを制御する方法

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; 
     } 
    }) 

} 

です私はさまざまな方法で解決しようとしましたが、わかりません。 私は、プレーヤーがそれ以上の方法では動かすことができない以上の側面から岩を打つときに解決策が必要です。

は、既存のスイッチを中心に、以下のようなものを試してみてください、あなたのkeyUpイベントハンドラで

答えて

0

ありがとう:

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; 
     } 
    } 

私はあなたが障害物の配列だけではなく、単一のがあるでしょうと仮定しています岩。