Учимся рационально Enum'ить декорации - Форум


Правила форума ·

  • Страница 1 из 1
  • 1
Учимся рационально Enum'ить декорации

Ty3uK

#1
Всем доброго утра/дня/вечера/ночи. Недавно я учил свои заклинания корректно работать с окружающим миром, и конечно же встал вопрос: а как же можно делать выборку дектораций без локальных ректов? Напомню, что основополагающая функция выбора дектораций - это функция
[jass]native EnumDestructablesInRect takes rect r, boolexpr filter, code actionFunc returns nothing[/jass]
она собирает декорации в определенном ректе. Все сразу же подумали "ну а что такого-то в локальных ректах? создаем, удаляем, эка невидаль". Ан нет, мои друзья, ректы сильно грузят процессор (доходит до такого, что спелл без утечек начинает лагать как первый опыт гуишника по созданию "ультрамегагиперкрутого заклинания"). Я нашел выход (возможно, их может быть и несколько, мне пришел в голову только один). О нем ниже.

Итак, какой же способ я придумал? А все очень просто - мы выбираем все декорации на карте с помощью статичного глобального ректа bj_mapInitialPlayableArea, высчитываем расстояние между взятой декорацией и точкой, от которой идет отсчет, и, если она удовлетворяет нашим требованиям - мы производим с ней действия. Немного полистав учебник геометрии и вспомнив из векторной геометрии, как можно вычислить расстояние между координатами, я написал такую функцию:

которая возвращает нам расстояние между координатами. Итак, ядро у нас есть, давайте накинем на него "мяска". Полный листинг своего спелла я приводить не буду (вы можете увидеть его в моей карте Simple Shooter под названием MK209), приведу лишь необходимую часть кода:

Итак, что мы сделали? Занесли кастера в переменную, выбрали все декорации на карте и после сравнения расстояния убили все декорации в радиусе 300. от юнита. "Систему" можно совершенствовать как угодно (например, через сравнение GetDestructableTypeId() сравнивать тип декорации и уничтожать только деревья), все ограничено только вашей фантазией. К... Кхм... "Статье" я приложил карту-пример. Спасибо всем за внимание, до новых встреч smile

Maxim Karelov aka Ty3uK © 2012
Сообщение отредактировал Ty3uK - Чт, 15.03.12, 12:40
Аниме - такая вещь, которая балансирует на грани "надоевшего" и "нового" из-за Наруто в основном. © [DUOS]
GUI Must Die v1.1 | Arena Multiboard

nikikin_old

#2
Если я правильно понял, это как дальность прорисовки работает?
Ники, ты временем не волшебник? Да нет, я такая смесь Эштона Картчера,Гендальфа Белого и Брюса Виллиса)

DEMON_CHETS

#4
One More Enum. Good. happy

Добавлено (24.03.12, 18:29)
---------------------------------------------
nikikin, Это что-то вроде

Quote (Ty3uK)
Занесли кастера в переменную, выбрали все декорации на карте и после сравнения расстояния убили все декорации в радиусе 300. от юнита.

Tzimisce

#5
Это просто wacko .

Что мешает просто уничтожать декорации? Почему ты не хочешь отлавливать попадание спелла в декорацию, или банально не наносить декорации урон? Все делается в редакторе объектов.
  • Страница 1 из 1
  • 1
Поиск: