首页 > 解决方案 > 如果与另一个精灵的位置相同,则停止精灵的移动

问题描述

我正在尝试做一个非常短的比赛,一个球进入球门,然后他们都消失了。我怎么做?我对 Javascript 相当陌生。问题在于评论//ball in goal(“背景(“蓝色”)”是我实际尝试做的占位符)。

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();
}

标签: javascriptspritecollision-detection

解决方案


这里:

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

假设你要检查你的ball和的坐标是否goal相同,则表达式不正确。

让我们看看如何评估这个表达式:

  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)) {
  //...
}

推荐阅读