具有随机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();
我在一组中有一些精灵,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();