我在一组随机带有x,y的子画面中。我希望那些x,y位于我的地面区域(这是一个圆形图形对象)上。做这个的最好方式是什么?
我在想这样的事情:在更新中检查子画面x,y是否与地面重叠(包含),如果它们不破坏它们并且让其随机产生另一个x,y,是否让它们存在?等等。
但是由于这些子画面太多并且重叠区域(地面),所以它不会对性能造成太大的影响(会吗?)。
那么有更好的方法吗?
答案 0 :(得分:0)
如果要让所有精灵随机落在圆内,则可以使用极坐标。
假设您的“地面”圆的半径为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();