Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.02.2006, 17:33
Скрипун вне форума Посмотреть профиль Отправить личное сообщение для Скрипун Найти все сообщения от Скрипун
  № 1  
Ответить с цитированием
Скрипун
 
Аватар для Скрипун

Регистрация: Aug 2005
Сообщений: 687
Записей в блоге: 1
Отправить сообщение для Скрипун с помощью ICQ
По умолчанию Кто ближе из всех?

У меня проблема:
есть несколько точек (координаты которых задаютя координатами клипов, не двигаются), есть перемещаемая точка: к примеру указатель мыши или двужущийся мувик. Так вот, надо определить кто из точек в данный момент находится НАЙближе, не посто растояние(число) максимальной величины, но кто контретно...

Парился по всякому... получилось только определять максимальное растояние: определив каждое и выбирать найбольшее

Старый 05.02.2006, 18:24
Erya вне форума Посмотреть профиль Отправить личное сообщение для Erya Найти все сообщения от Erya
  № 2  
Ответить с цитированием
Erya
 
Аватар для Erya

Регистрация: Feb 2006
Адрес: Рига
Сообщений: 42
Помоему ничего сложного, тебе нужно:
1 массив содержищай все точки
2 какую-либо переменную, содержащую ближайшую точку.
3. при движении точки, мышки и т.п. ты циклом проверяешь растояние до объектов в массиве, и если текущее растояние меньше чем предидущее, присваеваем его в переменную, которая содержит ближайшую точку.
3.1 Либо просто используешь Math.min
4. После цикла у тебя получится наиближайшая точка.

Вроде так, если я правильно понял.

Старый 05.02.2006, 18:33
Скрипун вне форума Посмотреть профиль Отправить личное сообщение для Скрипун Найти все сообщения от Скрипун
  № 3  
Ответить с цитированием
Скрипун
 
Аватар для Скрипун

Регистрация: Aug 2005
Сообщений: 687
Записей в блоге: 1
Отправить сообщение для Скрипун с помощью ICQ
Ну правильно понял... только эту точку, а точнее число я и определил, но мне надо знать это расстояние до какой точки тоесть название мувика: clip1, или clipn... до которого оказалось найближе...

Старый 05.02.2006, 18:46
Erya вне форума Посмотреть профиль Отправить личное сообщение для Erya Найти все сообщения от Erya
  № 4  
Ответить с цитированием
Erya
 
Аватар для Erya

Регистрация: Feb 2006
Адрес: Рига
Сообщений: 42
А разве переменная, содержащая ближайшую точку, не может быть ссылкой на объект (мувик) ?

Старый 05.02.2006, 18:50
Скрипун вне форума Посмотреть профиль Отправить личное сообщение для Скрипун Найти все сообщения от Скрипун
  № 5  
Ответить с цитированием
Скрипун
 
Аватар для Скрипун

Регистрация: Aug 2005
Сообщений: 687
Записей в блоге: 1
Отправить сообщение для Скрипун с помощью ICQ
Не знаю... а если не очень лень можешь код набросать?

Старый 05.02.2006, 19:03
Ieshua вне форума Посмотреть профиль Отправить личное сообщение для Ieshua Найти все сообщения от Ieshua
  № 6  
Ответить с цитированием
Ieshua

Регистрация: May 2004
Адрес: Москва
Сообщений: 76
1. Чтобы найти расстояние между точками - нужно либо по формуле пифагора, либо по формуле нахождения длины вектора...
Затем цикл - который проверяет расстояние до всех точек
2. В цикле просто выделяешь наименьшее число...
__________________
Улыбка - понятие растяжимое...

Старый 05.02.2006, 19:27
Erya вне форума Посмотреть профиль Отправить личное сообщение для Erya Найти все сообщения от Erya
  № 7  
Ответить с цитированием
Erya
 
Аватар для Erya

Регистрация: 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, время: 21:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 21:26.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.