结肠炎检测

Colission detection

本文关键字:检测 结肠炎      更新时间:2023-09-26

我正在为我的表弟制作一个简单的精灵游戏。这有点简单,皮卡丘从右边跑过来,灰烬在右边移动。

只有一个问题,当我按下空格键时,我的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");
   }
}

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

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

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

第一件事是:catch是javascript中的一个保留关键字,throw也是。。。

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

然后通过"animate"移动球将无法控制实际位移。UI应该反映物理,而不是相反。

考虑

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

如果你做了以上所有的事情,你的碰撞测试仍然会有问题。

if (positionBalCol == positionPika)

使用浮点数可能永远不会是真的,因为位置BalCol会随着时间的推移而累积。

将条件更改为

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