我已经设置了一个包含理论单元格的网格类。
我有一个方法collectCells()
,它接受起点,弧度和距离作为参数。我希望这个方法返回一个Array,其中包含沿给定角度的所有单元格,这些单元格与起点之间的指定距离,例如。
对我来说,最简单的方法就是循环遍历给定方向上的所有像素,并在我去的时候选择单元格,例如:
for(var i:int = 0; i<distance; i++)
{
startPoint.x += Math.cos(radians);
startPoint.y += Math.sin(radians);
if( start point falls within uncollected cell) collect cell;
}
这显然很差,因为循环将与我指定的距离一样长 - 非常慢。
我尝试了不同的东西,创建了一个nextCell()
方法,它接受最后收集的单元格和弧度。该方法在弧度指定的方向上投射了25个像素点,收集了所得到的细胞,然后从该细胞中重新开始给定数量的细胞。
我并没有真正清楚地考虑这种方法,并且一旦完成就意识到我遇到了问题,因为每次寻找下一个单元时,我正在测试的实际路径都会被破坏,例如
绿色虚线是所需路径,蓝线是构成每个nextCell()
调用的路径,因为检查是从每个单元格的中心进行的。
在指定距离(像素)上有效收集给定方向的单元格的正确方法是什么?