我在2D游戏中有一个坐标网格。 我需要在可变宽度的线上找到特定尺寸的射弹的多个目标。
坐标是绝对整数值。
在我的网格中,根据我的情况,它与典型的X和Y轴不同。 对于北方,它是X-1,Y-1。南,X + 1,Y + 1。钻石图案。
0,0
0,1 1,1 1,0
0,2 1,2 2,2 2,1 2,0
0,3 1,3 2,3 3,3 3,2 3,1 3,0
etc...
没有负坐标。
Here is a visual example of what I hope to accomplish. 两条黑线表示各个集合的单独目标区域,每个红点表示需要被验证为黑线内的对象的对象。
这是我想要改编或替换的原始功能代码。 它在一条线上的坐标集合具有固定的宽度。我需要能够在需要时制作更广泛的目标坐标的东西。
List<coords> line(int xa, int ya, int xb, int yb)
{
int dx = xb - xa, dy = yb - ya, steps, k;
float xincrement, yincrement, x = xa, y = ya;
if (Math.Abs(dx) > Math.Abs(dy)) steps = Math.Abs(dx);
else steps = Math.Abs(dy);
xincrement = dx / (float)steps;
yincrement = dy / (float)steps;
var thisLine = new List<coords> {new coords(Math.Round(x), Math.Round(y))};
for (k = 0; k < MaxDistance; k++)
{
x += xincrement;
y += yincrement;
thisLine.Add(new coords(Math.Round(x), Math.Round(y)));
}
return thisLine;
}
任何答案都应该记住,集合是时间敏感的,性能很重要,因为它将在服务器环境中使用。