【发布时间】:2020-04-03 18:29:17
【问题描述】:
我正在尝试制作 Snake 游戏,并且正在尝试让 Apple 功能正常工作。这个脚本的目的是,每当我的蛇越过苹果时,苹果就会消失并重新出现在屏幕上的随机位置。但它什么也没做,知道为什么吗?
P.S:相机尺寸为 10,纵横比为 16:9,这就是为什么我有一些奇怪的 Random.Range 值。此外,我在 Update 中使用 Debug.Log 来确保变量有效,是的,每当我的蛇移动时,它的坐标就会显示出来。
public class Apple_RandomSpawn : MonoBehaviour
{
private Vector2 foodPos;
private Snake_Move snakeMove;
void Start()
{
SpawnApple();
}
public void Update()
{
transform.position = new Vector2(foodPos.x, foodPos.y);
SnakeAte();
}
public void SpawnApple()
{
foodPos = new Vector2(Random.Range(-17, 17), Random.Range(-9, 9));
}
public void SnakeAte()
{
if (Mathf.Approximately(foodPos.x, snakeMove.pos.x) && Mathf.Approximately(foodPos.y, snakeMove.pos.y))
{
SpawnApple();
}
}
}
【问题讨论】:
-
Vector2 的
x和y是float。我的猜测是foodPos.x就像0.121和snakeMove.pos.x就像0.1213之类的。我建议使用调试器单步执行。 -
我应该添加某种舍入组件吗?导致蛇每 1/60 秒在 x 值中移动 0.1,这使得蛇的移动成为浮动。不知道我将如何解决 xD
-
如果这是问题所在,我可能会检查它们之间的距离是否小于某个数字。另请注意,浮点数无法准确表示所有小数值,就像我们无法准确表示以 10 为底的 1/3。有关更多信息,请参阅 Is floating point math broken?。
-
@John 我将 Debug.Log 更改为显示 foodPos - snakeMove.pos 并且我得到的值非常小,只有 0.1 秒,所以是的,我认为你是对的。