Colission检测

时间:2016-05-11 14:50:48

标签: javascript jquery

我正在为我表弟做一个简单的神奇宝贝游戏。有点简单的皮卡丘从右边跑,灰烬在右边移动。

当我按空格键时只有一个问题我的pokébal从左到右飞行,但没有发现任何碰撞。

你能帮帮我吗? 代码如下:

js:

function goPika() {
  $("#pika").animate({ left : '5px' }, 2500);
  setInterval(function(){ 
    checkPosition();
  }, 100);

  function checkPosition() {
     var positionPika = $("#pika").position().left;
  }
}

function Throw() {
  $("#bal").animate({ marginLeft : "96%" }, 1000);
  setInterval(function(){ 
    checkPositionBal();
  }, 100);

  function checkPositionBal(){
     var positieBal = $("#bal").position().left;
     var positieBalCol = (positionBal + 200);
     console.log(positionBalCol);
   }
 };


function catch() {
   if (positionBalCol == positionPika) {
     console.log("collision");
   }
}

2 个答案:

答案 0 :(得分:0)

首先是:catch是javascript中的保留关键字,所以抛出......

然后,正如另一个答案所指出的,你的变量应该在你的函数之外可见(在顶部声明)。

然后通过“动画”移动球使您无法控制实际位移。 UI应该反映物理,而不是相反。

改为考虑

var positionBalCol = 0;
var dt = 30.0;
setInterval(function() {
    positionBalCol += velocity * dt
}, dt);

鉴于您完成了以上所有操作,您仍然可以通过碰撞测试进行测试。

if (positionBalCol == positionPika)

可能永远不会使用浮点数,因为positionBalCol上的某些舍入会随着时间的推移而累积。

将条件更改为

if (Math.abs(positionBalCol == positionPika) < 1.0E-4) // or whatever suitable threshold

答案 1 :(得分:0)

您需要在函数之外声明变量,以便所有函数都可以访问它们。例如:

var positionBalCol,
    positionPika;

function checkPosition() {
    positionPika = $("#pika").position().left;
}

这会将positionPika功能存储在checkPosition之外。这样,您以后可以使用它将其与positionBalCol进行比较。