编辑我有一个重新考虑:我将使用一个更容易实现带有网格的树结构,这样每个块最多可以有 4 个邻居。
我正在尝试将块连接到这朵花的茎(一系列块)上。绿色块是现有的茎,蓝色块是附着在鼠标上的。
附着在鼠标上的方块将正确地捕捉到最近的边缘(我现在允许对角线),但是通过捕捉到上方或下方的方块,方块也能够进入茎杆的“内部”(图 2)。
我的问题是,我怎样才能阻止这种情况?我考虑过
- 再次迭代列表,但忽略我刚刚尝试附加的块;我认为通过附加到茎“内部”的另一个块,这只会导致同样的问题。
- 找到我正在相交的块并从中获取另一个连接点,重复直到没有交叉点;这似乎是更好的选择,但在一次相交超过 1 个块时可能会非常混乱
我应该注意,我计划有一个更平滑的捕捉,而不仅仅是任意边缘,所以网格几乎是不可能的。我非常有信心必须有一个优雅的解决方案,我只是没有看到它!
这是我目前的快照代码
var mousePos:Point = new Point(mouseX, mouseY);// new Point(e.stageX, e.stageY);
var nearestPoint:Point = null;
var nearestDistance:Number = 0;
for (var i:int = 0; i < mPlant.length; ++i) {
var part:PlantPart = mPlant[i];
if (part is Stalk) {
var connectionPoint:Point = (part as Stalk).getNearestConnectionPoint(mousePos);
var distance:Number = Point.distance(mousePos, connectionPoint);
if (nearestPoint == null || distance < nearestDistance) {
nearestPoint = connectionPoint;
nearestDistance = distance;
}
}
}
if (nearestPoint != null) {
mMousePointer.x = nearestPoint.x;
mMousePointer.y = nearestPoint.y;
}