2017-04-15 5 views
0

私は衝突検出に取り組んでおり、オブジェクトが特定のx位置に達したときにテストすることで簡単に始めると考えました。それは私が100に設定したときに機能します。これは、文字の最初の最高値であり、問​​題がトップアップであると信じられます。しかし、私はなぜ円が動いているのか分からない。「トップ」を最新の状態に保つ方法を教えてもらえれば、すばらしい衝突検出を手伝ってください!上位属性は更新されません。関数は、関数値= JavaScriptの最初のトップ値に設定した場合にのみ機能します

(ps、JavaScript、htmlを1ページに入れるのは良いことだと知っていますが、これをウェブサイトの一部として1つのファイルに移動しました。ウェブサイト全体を確認したら、適切なファイルに追加します)

<html> 
    <head> 
     <style> 
     #character { 
     position: absolute; 
     width: 42px; 
     height: 42px; 
     background: black; 
     border-radius: 50%; 
     } 
     #character2 { 
     position: absolute; 
     width: 42px; 
     height: 42px; 
     background: pink; 
     border-radius: 50%; 
    } </style> 
    </head> 
    <body> 

    <div id = 'character'></div> 
    <div id = 'character2'></div> 

    <script> 
    var keys = {}; 
      keys.UP = 38; 
      keys.LEFT = 37; 
      keys.RIGHT = 39; 
      keys.DOWN = 40; 
      keys.W = 87; 
      keys.A = 65; 
      keys.D = 68; 
      keys.S = 83; 

     /// store reference to character's position and element 
     var character = { 
      x: 1000, 
      y: 100, 
      speedMultiplier: 1, 
      element: document.getElementById("character") 
     }; 

     var character2 = { 
      x: 100, 
      y: 100, 
      speedMultiplier: 3, 
      element: document.getElementById("character2") 
     }; 


     /// key detection (better to use addEventListener, but this will do) 
     document.body.onkeyup = 
     document.body.onkeydown = function(e){ 
      /// prevent default browser handling of keypresses 
      if (e.preventDefault) { 
      e.preventDefault(); 
      } 
      else { 
      e.returnValue = false; 
      } 
      var kc = e.keyCode || e.which; 
      keys[kc] = e.type == 'keydown'; 
     }; 

     /// character movement update 
     var moveCharacter = function(dx, dy){ 
      character.x += (dx||0) * character.speedMultiplier; 
      character.y += (dy||0) * character.speedMultiplier; 
      character.element.style.left = character.x + 'px'; 
      character.element.style.top = character.y + 'px'; 
     }; 

    var moveCharacter2 = function(dx, dy){ 
      character2.x += (dx||0) * character2.speedMultiplier; 
      character2.y += (dy||0) * character2.speedMultiplier; 
      character2.element.style.left = character2.x + 'px'; 
      character2.element.style.top = character2.y + 'px'; 
     }; 
     /// character control 
     var detectCharacterMovement = function(){ 
      if (keys[keys.LEFT]) { 
      moveCharacter(-1, 0); 
      } 
      if (keys[keys.RIGHT]) { 
      moveCharacter(1, 0); 
      } 
      if (keys[keys.UP]) { 
      moveCharacter(0, -1); 
      } 
      if (keys[keys.DOWN]) { 
      moveCharacter(0, 1); 
      } 
      if (keys[keys.A]) { 
      moveCharacter2(-1, 0); 
      } 
      if (keys[keys.D]) { 
      moveCharacter2(1, 0); 
      } 
      if (keys[keys.W]) { 
      moveCharacter2(0, -1); 
      } 
      if (keys[keys.S]) { 
      moveCharacter2(0, 1); 
      } 
     }; 


     /// update current position on screen 
     moveCharacter(); 
     moveCharacter2(); 

     /// game loop 
     setInterval(function(){ 
      detectCharacterMovement(); 
     }, 1000/24); 

    function getPosition() { 

     var elem = document.getElementById("character"); 
    var top = getComputedStyle(elem).getPropertyValue("top"); 
    if (top == '200px') { 
     alert ("hi"); 
    } 
    getPosition() 
    } 
    getPosition() 
    //  var pos1 = document.getElementById('character').style.top 


    </script> 
    </body> 
    </html> 

答えて

0

私はそれを理解しました。 Jqueryの.position()を追加して座標を取得しました!衝突検出のために私はこれを加えました:

function collision1() { 
    $(document).ready(function(){ 
     var x = $("#character").position(); 
     var y = $("#character2").position(); 
     var zid = '#' + id 
     var z = $(zid).position(); 
     var topX = parseInt(x.top); 
     var topZ = parseInt(z.top); 
     var leftX = parseInt(x.left); 
     var leftZ = parseInt(z.left); 
     var topY = parseInt(y.top); 
     var leftY = parseInt(y.left); 
     if (topX > topZ && topX < (topZ + 50) && leftX > leftZ && leftX < (leftZ + 100)) { 
      alert('Player 1 Won! Click restart to play again.') 
      document.getElementById("button2").style.display = "block"; 
      document.getElementById("def").style.display = "none"; 
      document.getElementById("def2").style.display = "none"; 
      document.getElementById("def3").style.display = "none"; 
      document.getElementById("def4").style.display = "none"; 
      document.getElementById("term").style.display = "none"; 
     } 
    else { 
    collision1()} 
});} 

私はそれがおそらくこれをプログラムする最も効果的な方法ではないことは知っていますが、動作します!

関連する問題