在corona中随机显示物体,且不与屏幕上的其他物体重叠。

我想在屏幕上显示随机物体,我只有一个球,但生成的物体与球重叠,我想获取球的坐标,根据它只移动随机物体。我尝试了以下代码片段。

local ballX = ball.x
local ballY = ball.y

local xPos = generate_random(40, 600)
local yPos = generate_random(40, 920)
if (xPos >= ballX and xPos <= ballX) or (yPos >= ballY and yPos <= ballY) then
    objplace.x = xPos + 150
    objplace.y = yPos + 150
else
    objplace.x = xPos
    objplace.y = yPos
end
点赞
用户2387054
用户2387054

你并没有检查球是否重叠,你只是检查它们的中心位置是否相同,如果是,则将它们移动。你需要考虑球的整体面积(因此它的半径)。要使它完美,你需要使用一些代数/几何知识(因为半径可以看作是不同角度的直角三角形,其中xPos将是底长,yPos将是侧边高度)。

这里提供的代码非常简单(不完美):

while((xPos>=(ballX + ballRadius) || xPos<=(ballX - ballRadius)) ||
    (yPos>=(ballY + ballRadius) || yPos<=(ballY - ballRadius))){
    xPos = xPos + 150;
    yPos = yPos + 150;
}
objplace.x = xPos;
objplace.y = yPos;

同样,这个代码非常简单,有很少的错误检查,并且还有更多的参数需要考虑才能完美。如果你真的需要我分析它,我可以,但是这可能是一个锻炼你逻辑推理能力的好项目 :)

2014-03-12 16:29:32