Вы должны пройтись по всем элементам и найти наименьшее расстояние до мыши.Затем сохраните индекс массива элемента.Попробуйте что-то вроде этого:
// 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);
Конечно, это даст вам только первый ближайший элемент, поэтому вы должны решить, чего хотите добиться, если два элемента находятся на одинаковом расстоянии.
Вам также нужно будет учесть происхождение ваших элементов.Там, вероятно, будут исходные точки, установленные там в верхнем левом углу, поэтому вам необходимо учесть это в ваших расстоянии .
Вы также можете проверить минимальное расстояние.Поэтому, если пользователь перетаскивает слишком далеко от какого-либо элемента, ничего не предпринимайте.