相位器3精灵具有随机x,y,但在特定区域

时间:2018-08-04 19:53:40

标签: javascript phaser-framework

我在一组随机带有x,y的子画面中。我希望那些x,y位于我的地面区域(这是一个圆形图形对象)上。做这个的最好方式是什么?

我在想这样的事情:在更新中检查子画面x,y是否与地面重叠(包含),如果它们不破坏它们并且让其随机产生另一个x,y,是否让它们存在?等等。

但是由于这些子画面太多并且重叠区域(地面),所以它不会对性能造成太大的影响(会吗?)。

那么有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

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

Polar and cartesian coordinates

假设您的“地面”圆的半径为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和距X轴的角度a。您可以使用以下方法获取它们:

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

如果您不希望子图形超出圆的边缘,则可以减去子图形的半径,如下所示:

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