javascript - 如果与另一个精灵的位置相同,则停止精灵的移动
问题描述
我正在尝试做一个非常短的比赛,一个球进入球门,然后他们都消失了。我怎么做?我对 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();
}
解决方案
这里:
if ((ball.x && ball.y) == (goal.x && goal.y)) {
//...
}
假设你要检查你的ball
和的坐标是否goal
相同,则表达式不正确。
让我们看看如何评估这个表达式:
- 首先,
(ball.x && ball.y)
被评估为任何东西ball.y
,除非ball.x
是虚假的。也就是说,(-5 && 10)
->10
和(0 && 10)
->0
。 - 接着,
(goal.x && goal.y)
以与上述相同的方式评价。 - 最后,相等运算符
==
对 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)) {
//...
}
推荐阅读
- perl - 监视和读取文件中的新行?
- winappdriver - 哪个工具与 windows 10 兼容,用于提取 windows 元素以实现窗口 gui 自动化
- c++ - 我可以在不重叠的情况下将多个协程生成到同一条链上吗?
- r - 根据列的聚合函数对数据框的行进行排序
- angular - 错误类型错误:_co.deleteConsulta 不是函数
- python - Python 如何处理在多个 Python 实例中导入同一个模块?
- c# - 类索引器设计以访问类中的所有数组
- python - 打印小数点后位数最少的浮点数
- javascript - Rxjs 订阅队列
- vue.js - Vue + Webpack,Alias 无法在 Script 标签内解析