我有一个精灵网格。 现在我想在网格元素上拖动图像。 因此,我需要知道哪个x / y的网格元素是最靠近鼠标位置的点。 所有网格元素都存储在一个数组中。 我怎样才能做到这一点?
答案 0 :(得分:3)
您必须遍历所有元素并找到与鼠标的最小距离。然后存储元素的数组索引。尝试这样的事情:
// Setup variables outside of loop.
var mousePoint:Point = new Point(mouseX, mouseY);
var elementPoint:Point = new Point();
var element:Sprite;
var closestIndex:uint = 0;
var closestDist:Number;
// Loop through elements
for (var i:int = 0; i < gridElements.length; i++)
{
element = gridElements[i] as Sprite;
// Set the elementPoint's x and y rather than creating a new Point object.
elementPoint.x = element.x;
elementPoint.y = element.y;
// Find distance from mouse to element.
var dist:Number = Point.distance(mousePoint, elementPoint);
// Update closestIndex and closestDist if it's the closest.
if (i == 0 || dist < closestDist)
{
closestDist = dist;
closestIndex = i;
}
}
// Can now use closestIndex to get the element from the array.
trace('The closest element is at index', closestIndex, ', with a distance of', closestDist);
当然,这只会让你获得第一个最接近的元素,所以如果两个元素距离相等,你必须决定你想要发生什么。
您还需要允许元素的来源。可能会将原点设置为左上角,因此您需要在距离计算中允许这样做。
您还可以检查最小距离。因此,如果用户拖动距离任何元素太远,则不执行任何操作。
答案 1 :(得分:0)
如果您需要的是最近网格的x,y,那么您只需要做的就是。
var gridX:int = Math.floor(mouseX / NumberOfColumns);
var gridY:int = Math.floor(mouseY / NumberOfRows);
这会将鼠标坐标转换为网格坐标。
现在出现了问题。如果你将它们存储在一个二维数组中,那么如果你将它们存储在一个平面阵列(1d)中,那么你就有x / y,你需要像创建它一样查找它。
var myObject:Object = my2dArray[gridX, gridY];
var myObject:Object = myFlatArray[(gridX * NumberOfRows) + gridY];
如果你已经注意了如何创建阵列并推送其中的项目,那么在不搜索的情况下检索内容应该没有问题。