热门属性不会更新。函数只有当我设置如果函数值=初始顶值在javascript

问题描述:

我正在研究碰撞检测,并认为我会开始通过测试时,对象达到某个x位置简单。当我将它设置为100时,它起作用,它是'字符的最初的最高值,这导致我相信问题与最新的更新有关;但是,我不明白为什么这些圈子会移动,如果是这种情况。如果你可以告诉我如何保持“顶部”更新或更好,帮助我碰撞检测,这将是伟大的!我知道将css,javascript和html放在一个页面中并不好,我把它作为网站的一部分,但把它移到了一个文件中,这样我就可以单独测试它,而无需查看代码整个网站和我将它添加到适当的文件,一旦我得到这个想通了。)热门属性不会更新。函数只有当我设置如果函数值=初始顶值在javascript

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

我想通了!我只是添加了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()} 
});} 

我知道这可能不是编程这个最有效的方法,但它的工作原理!