我正在使用Cocos2D for iPhone来构建一个游戏。我在屏幕上有一个由水平和垂直线绘制的网格。(我用CCDrawNode做了)你可能会猜到那里有很多交叉点,我的意思是水平和垂直线相交的点。每次touchBegan-Moved-Ended例程我画一条线,一条更大胆和不同的颜色线。在touchesMoved方法中,我需要找到最接近线的当前终点的交点,并将线末端粘贴到该点。我怎样才能做到这一点?我有一个想法,就是在绘制网格时将所有交叉点添加到数组中,遍历该数组并找到最接近的数组。但我认为这不是最好的方法。你有更好的想法吗?
答案 0 :(得分:3)
假设它是具有均匀间隔线的普通网格(例如,相隔每10个像素),使用公式告诉您交叉点应该的位置要好得多。
E.g。给定终点X / Y为17,23,则x(17)/ x-间距(10)= 1.7,舍入为2. 2 * x-间距= 20.y / y-间距= 2.3-> 2 * 20 = 20.因此你的交叉点是20,20。
编辑:更详细的例子,在C#中就像我使用的那样,如果我有时间,我会写一个Objective-C样本
// defined somewhere and used to draw the grid
private int _spacingX = 10;
private int _spacingY = 10;
public Point GetNearestIntersection(int x, int y)
{
// round off to the nearest vertical/horizontal line number
double tempX = Math.Round((double)x / _spacingX);
double tempY = Math.Round((double)y / _spacingY);
// convert back to pixels
int nearestX = (int)tempX * _spacingX;
int nearestY = (int)tempY * _spacingY;
return new Point(nearestX, nearestY);
}
注意:上面的代码非常详细,以帮助您理解,您可以轻松地将其重新编写为更清洁