如果精灵与另一个精灵的位置相同,则停止其移动

时间:2020-05-14 00:07:43

标签: javascript sprite collision-detection

我正在尝试做一个非常短的游戏,球进入一个球门,然后它们都消失了。我怎么做?我对Java相当陌生。问题在于评论//球进入球门(“ background(“ blue”)“是我实际尝试执行的占位符)。

goal.setAnimation("goal for design.png_1");
goal.scale = 0.75;
goal.rotation = 5;

var ball = createSprite(40, randomNumber(25, 360));
ball.setAnimation("animation_1");


function draw() {
  background("white");
  // BALL MOVING CODE
  if (keyDown ("right")) {
    ball.x = ball.x + 5;
  }
  if (keyDown ("down")) {
    ball.y = ball.y + 5;
  }
  if (keyDown ("up")) {
    ball.y = ball.y - 5;
  }
  if (keyDown ("left")) {
    ball.x = ball.x - 5;
  }

  // ball in goal
  if ((ball.x && ball.y) == (goal.x && goal.y)) {
    background("blue");
  }

  drawSprites();
}

1 个答案:

答案 0 :(得分:0)

这里:

if ((ball.x && ball.y) == (goal.x && goal.y)) {
  //...
}

假设您要检查ballgoal的坐标是否相同,则表达式不正确。

让我们看看如何计算该表达式:

  1. 首先,除非(ball.x && ball.y)虚假,否则ball.y的评估结果为ball.x。即(-5 && 10)-> 10(0 && 10)-> 0
  2. 接下来,以与上述相同的方式评估(goal.x && goal.y)
  3. 最后,相等运算符==对1.和2进行比较。

在大多数情况下,这种逻辑显然无法正常工作。

例如,当ball{x: 1, y: 10}并且goal{x: 20, y: 10}时:

(1 && 10) == (20 && 10)-> (10) == (10)-> true

肯定不是您想要的结果。


您需要做的是将坐标一一比较,然后将结果与逻辑AND相结合:

if ((ball.x === goal.x) && (ball.y === goal.y)) {
  //...
}