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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 13.07.2011, 18:18
Scorp2008 вне форума Посмотреть профиль Отправить личное сообщение для Scorp2008 Найти все сообщения от Scorp2008
  № 11  
Ответить с цитированием
Scorp2008
[+1 13.07.11]
[++1 13.07.11]

Регистрация: Dec 2009
Сообщений: 42
DaFive - Опять хероту какую-то написал, лишь бы повякать. "с первым попавшимся" - ты точно идиот, квадраты не попадаются по очереди, а определяются все разом (а точнее определяются точки пересечения, а самый первый вопрос как раз и состоял в том чтобы определить ближайшую из них), и раз ты пишешь такую хрень то просто не представляешь себе как действует эта функция по общим законам геометрии и вякаешь не по теме.


Последний раз редактировалось Scorp2008; 13.07.2011 в 18:21.
Старый 13.07.2011, 18:32
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 12  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
DaFive, Scorp2008 получают замечание за оскорбления.
__________________
Поймай яблоко 2!


Последний раз редактировалось Zebestov; 13.07.2011 в 18:40.
Старый 13.07.2011, 18:57
Scorp2008 вне форума Посмотреть профиль Отправить личное сообщение для Scorp2008 Найти все сообщения от Scorp2008
  № 13  
Ответить с цитированием
Scorp2008
[+1 13.07.11]
[++1 13.07.11]

Регистрация: Dec 2009
Сообщений: 42
Хорошо.
Повторю вопрос для i.o. а то насвинячили тут.
i.o. - выдает массив точек пересечения, но не массив объектов которые пересекаются. Хотя массив объектов которые пересекаются отсюда сделать не сложно, вопрос то в том и состоит, как отсортировать их по расстоянию от стрелка до объекта?

Старый 13.07.2011, 19:09
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 14  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Создайте пустой массив, в который будете добавлять объекты, которые пересекаются с отрезком. Перебирайте объекты и смотрите пересечение с линией. Если пересечение имеет место быть - добавить в массив объект примерно такого вида
Код AS3:
{ object: null, distance: NaN }
(либо заранее определите спец класс) вместо null и NaN подставите реальные значения.
После того, как все объекты будут перебраны, отсортируйте получившийся массив по полю "distance", использую метод sortOn.
Останется только взять первый элемент, если длина массива получилась больше нуля.


Последний раз редактировалось i.o.; 13.07.2011 в 19:12.
Старый 13.07.2011, 19:15
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 15  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Если все точки лежат на одной линии, то можно не вычислять дорогой distance, а оперировать лишь одной из координат на выбор. Иначе говоря, по условиям задачи мы опираемся на факт, что если на проекции на ось X (или Y) точка самая близкая к стрелку, то и на самой линии она тоже самая близкая.

Добавлено через 2 минуты
Ну если вдруг непонятно: кому принадлежит самая близкая точка пересечения, тому и капут.
__________________
Поймай яблоко 2!

Старый 13.07.2011, 19:19
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 16  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
не совсем, есть и частные случаи - прямая параллельна ОХ или ОY )
Вместо distance можно вычислять расстояние без извлечения корня.

Старый 13.07.2011, 19:21
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 17  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Цитата:
Сообщение от i.o. Посмотреть сообщение
не совсем, есть и частные случаи - прямая параллельна ОХ или ОY )
Вместо distance можно вычислять расстояние без извлечения корня.
Когда я говорил "на выбор", я не запрещал делать этот выбор динамически (один if все решит). Это всяко быстрее, чем если даже не вычислять корень суммы произведений.
__________________
Поймай яблоко 2!

Старый 13.07.2011, 23:18
Scorp2008 вне форума Посмотреть профиль Отправить личное сообщение для Scorp2008 Найти все сообщения от Scorp2008
  № 18  
Ответить с цитированием
Scorp2008
[+1 13.07.11]
[++1 13.07.11]

Регистрация: Dec 2009
Сообщений: 42
Спасибо вам, вот уже наваял код который заносит все объекты которые пересекаются в отдельным массив, а также определяют дистанцию. Вот (по одной координате не стал делать, т.к. с любоый стороны ведь враг подойти может, и то что по одной координате он ближе всего не значит что он ближе всего вообще):
Код AS3:
for (var k:uint = 0; k < sad.length; k++) {
var sadV:Point = sad[k].localToGlobal(new Point(stage.x, stage.y));
var pow1:Number = (bodyconm.x - sadV.x);
pow1 *= pow1;
var pow2:Number = (bodyconm.y - sadV.y);
pow2 *= pow2;
var distance:Number = Math.sqrt(pow1 + pow2);
trace(distance);
}
Вроде дистанция определяется верно, sad - это уже массив с объектами которые пересеклись. А вот дальше загвоздка, что-то не пойму как быстренько определить наименьшее значение и воздействовать на него этот элемент?
P.S.: localToGlobal делаю потому что враги у меня расположены внутри клипа карты, который я двигаю вместо игрока когда двигаюсь.

Я так понял дальше нужно как говорит i.o. "добавить в массив объект примерно такого вида..." - именно с этим и не ясно совсем, можно пояснить как оно в коде выглядеть будет? А также это самый краткий путь? что-то столько вычислений делается, как бы думаю тормозов не было при большом количество врагов.


Последний раз редактировалось Scorp2008; 13.07.2011 в 23:23.
Старый 13.07.2011, 23:40
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 19  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
может в этом цикле сразу и запоминать объект с самой короткой дистанцией? Чтобы два раза не бегать по массиву
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 13.07.2011, 23:45
Scorp2008 вне форума Посмотреть профиль Отправить личное сообщение для Scorp2008 Найти все сообщения от Scorp2008
  № 20  
Ответить с цитированием
Scorp2008
[+1 13.07.11]
[++1 13.07.11]

Регистрация: Dec 2009
Сообщений: 42
GBee, ну вот я и не знаю как поступить, с математикой у меня туго, всё больше готовое ищу и вставляю, а как в этом же цикле определить наименьшее из них и воздейстсовать на этот элемент?

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:27.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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