![]() |
|
||||||||||
|
|||||
|
У меня проблема:
есть несколько точек (координаты которых задаютя координатами клипов, не двигаются), есть перемещаемая точка: к примеру указатель мыши или двужущийся мувик. Так вот, надо определить кто из точек в данный момент находится НАЙближе, не посто растояние(число) максимальной величины, но кто контретно... Парился по всякому... получилось только определять максимальное растояние: определив каждое и выбирать найбольшее ![]() |
|
|||||
|
Регистрация: Feb 2006
Адрес: Рига
Сообщений: 42
|
Помоему ничего сложного, тебе нужно:
1 массив содержищай все точки 2 какую-либо переменную, содержащую ближайшую точку. 3. при движении точки, мышки и т.п. ты циклом проверяешь растояние до объектов в массиве, и если текущее растояние меньше чем предидущее, присваеваем его в переменную, которая содержит ближайшую точку. 3.1 Либо просто используешь Math.min 4. После цикла у тебя получится наиближайшая точка. Вроде так, если я правильно понял. |
|
|||||
|
Регистрация: Feb 2006
Адрес: Рига
Сообщений: 42
|
А разве переменная, содержащая ближайшую точку, не может быть ссылкой на объект (мувик) ?
|
|
|||||
|
Регистрация: May 2004
Адрес: Москва
Сообщений: 76
|
1. Чтобы найти расстояние между точками - нужно либо по формуле пифагора, либо по формуле нахождения длины вектора...
Затем цикл - который проверяет расстояние до всех точек 2. В цикле просто выделяешь наименьшее число...
__________________
Улыбка - понятие растяжимое... |
|
|||||
|
Регистрация: Feb 2006
Адрес: Рига
Сообщений: 42
|
var allPoints:Array = new Array();
for (var i:Number = 1; i <= 5; i++) {
// Создаём мувик кидаём его кдуанить на поле
var tempMovie:MovieClip = _root.createEmptyMovieClip('point' + i, _root.getNextHighestDepth());
with(tempMovie) {
lineStyle(1, '0x000000');
lineTo(10, 0);
lineTo(10, 10);
lineTo(0, 10);
lineTo(0, 0);
_x = random(Stage.width);
_y = random(Stage.height);
}
// В массив, который содержит все мувики пихаем текущий.
allPoints.push(tempMovie);
}
// После цикла - 5 мувиков, и массив, с сылками на них.
// Функция для определения манимального расстояния. Возвращает ссылку на мувик.
// Принимает массив мувиков, а также точку, до которой нужно считать растояние.
function minDistance(movies:Array, x:Number, y:Number):MovieClip {
var closestMovie:MovieClip = movies[0];
var minDistance:Number = 9999;
for(var i:Number = 0; i < movies.length; i++) {
var currentMovie:MovieClip = movies[i];
var distance:Number = Math.sqrt(((x - currentMovie._x)*(x - currentMovie._x)) + ((y - currentMovie._y)*(y - currentMovie._y)));
if (distance < minDistance) {
closestMovie = currentMovie;
minDistance = distance;
}
}
return closestMovie;
}
// Дальше идёт пример использования функции...
var line:MovieClip = _root.createEmptyMovieClip('line', _root.getNextHighestDepth());
function drawLine(Void):Void {
var movieToLine:MovieClip = minDistance(allPoints, _root._xmouse, _root._ymouse);
with(line) {
clear();
lineStyle(1, '0xFF0000');
moveTo(_root._xmouse, _root._ymouse);
lineTo(movieToLine._x, movieToLine._y);
}
}
setInterval(drawLine, 20);
![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 12:51. |
|
|
« Предыдущая тема | Следующая тема » |
|
|