![]() |
|
||||||||||
|
|||||
|
[+1 13.07.11]
[++1 13.07.11] Регистрация: Dec 2009
Сообщений: 42
|
DaFive - Опять хероту какую-то написал, лишь бы повякать. "с первым попавшимся" - ты точно идиот, квадраты не попадаются по очереди, а определяются все разом (а точнее определяются точки пересечения, а самый первый вопрос как раз и состоял в том чтобы определить ближайшую из них), и раз ты пишешь такую хрень то просто не представляешь себе как действует эта функция по общим законам геометрии и вякаешь не по теме.
Последний раз редактировалось Scorp2008; 13.07.2011 в 18:21. |
|
|||||
|
Lorem ipsum
|
DaFive, Scorp2008 получают замечание за оскорбления.
__________________
Поймай яблоко 2! Последний раз редактировалось Zebestov; 13.07.2011 в 18:40. |
|
|||||
|
[+1 13.07.11]
[++1 13.07.11] Регистрация: Dec 2009
Сообщений: 42
|
Хорошо.
Повторю вопрос для i.o. а то насвинячили тут. i.o. - выдает массив точек пересечения, но не массив объектов которые пересекаются. Хотя массив объектов которые пересекаются отсюда сделать не сложно, вопрос то в том и состоит, как отсортировать их по расстоянию от стрелка до объекта? |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Создайте пустой массив, в который будете добавлять объекты, которые пересекаются с отрезком. Перебирайте объекты и смотрите пересечение с линией. Если пересечение имеет место быть - добавить в массив объект примерно такого вида
(либо заранее определите спец класс) вместо null и NaN подставите реальные значения. После того, как все объекты будут перебраны, отсортируйте получившийся массив по полю "distance", использую метод sortOn. Останется только взять первый элемент, если длина массива получилась больше нуля.
__________________
Загружаем картинки, минуя ошибки безопасности Последний раз редактировалось i.o.; 13.07.2011 в 19:12. |
|
|||||
|
Lorem ipsum
|
Если все точки лежат на одной линии, то можно не вычислять дорогой distance, а оперировать лишь одной из координат на выбор. Иначе говоря, по условиям задачи мы опираемся на факт, что если на проекции на ось X (или Y) точка самая близкая к стрелку, то и на самой линии она тоже самая близкая.
Добавлено через 2 минуты Ну если вдруг непонятно: кому принадлежит самая близкая точка пересечения, тому и капут.
__________________
Поймай яблоко 2! |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
не совсем, есть и частные случаи - прямая параллельна ОХ или ОY )
Вместо distance можно вычислять расстояние без извлечения корня.
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
|
Lorem ipsum
|
Когда я говорил "на выбор", я не запрещал делать этот выбор динамически (один if все решит). Это всяко быстрее, чем если даже не вычислять корень суммы произведений.
__________________
Поймай яблоко 2! |
|
|||||
|
[+1 13.07.11]
[++1 13.07.11] Регистрация: Dec 2009
Сообщений: 42
|
Спасибо вам, вот уже наваял код который заносит все объекты которые пересекаются в отдельным массив, а также определяют дистанцию. Вот (по одной координате не стал делать, т.к. с любоый стороны ведь враг подойти может, и то что по одной координате он ближе всего не значит что он ближе всего вообще):
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); } P.S.: localToGlobal делаю потому что враги у меня расположены внутри клипа карты, который я двигаю вместо игрока когда двигаюсь. Я так понял дальше нужно как говорит i.o. "добавить в массив объект примерно такого вида..." - именно с этим и не ясно совсем, можно пояснить как оно в коде выглядеть будет? А также это самый краткий путь? что-то столько вычислений делается, как бы думаю тормозов не было при большом количество врагов. Последний раз редактировалось Scorp2008; 13.07.2011 в 23:23. |
|
|||||
|
[+1 13.07.11]
[++1 13.07.11] Регистрация: Dec 2009
Сообщений: 42
|
GBee, ну вот я и не знаю как поступить, с математикой у меня туго, всё больше готовое ищу и вставляю, а как в этом же цикле определить наименьшее из них и воздейстсовать на этот элемент?
|
![]() |
![]() |
Часовой пояс GMT +4, время: 00:57. |
|
|
« Предыдущая тема | Следующая тема » |
|
|