如果小精灵与另一个小精灵位于同一位置,则停止其运动

问题描述 投票:0回答:1

我正在尝试做一个非常短的游戏,球进入一个球门,然后它们都消失了。我怎么做?我对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();
}
javascript sprite collision-detection
1个回答
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)) {
  //...
}
© www.soinside.com 2019 - 2024. All rights reserved.