具有随机x,y但在特定区域中的phaser 3精灵

phaser 3 sprites with random x,y but in a specific area

我在一组中有一些精灵,x,y 是随机的。我希望那些 x,y 在我的某处,比方说,地面区域(这是一个圆形图形对象)。做这个的最好方式是什么?

我在想这样的事情:在更新中检查精灵 x,y 是否与地面重叠(包含),如果他们不破坏它们并制作另一个随机 x,它们是否让它们存在,y 等等。

但是由于这些精灵太多并且重叠区域(地面)它不是那么大我猜它会影响性能(它会?)。

那么有更好的方法吗?

如果你想让所有精灵随机落在圆圈内,可以使用极坐标。

假设您的 "ground" 圆的半径为 R,圆心为 M。

圆上的每个点都可以表示为 (x, y) 对或 (r, a) 对,其中 a 是角度,r 是到圆心的距离。

如图所示,您可以使用两个公式从 (r, a) 坐标获得 (x, y) 坐标。在您的情况下,中心位于 M,因此需要调整公式:

x = r * Math.cos(a) + M.x;
y = r * Math.sin(a) + M.y;

如果你想精确一点,你还可以考虑精灵的大小,使你得到的 (x, y) 对是精灵的左上角:

x = r * Math.cos(a) + M.x - sprite.width / 2;
y = r * Math.sin(a) + M.y - sprite.height / 2;

现在您所要做的就是随机生成 r 到圆心的距离,以及 a 到 X 轴的角度。您可以使用以下方式获取它们:

r = R * Math.random();
a = 2 * Math.PI * Math.random();

如果你不想让精灵越过圆的边缘,你可以减去精灵的半径,像这样:

r = (R - sprite.radius) * Math.random();