Если по простому - это альтернатива вызова функции.
Способ Вызов:
Библиотека А реагирует на кнопку и вызывает функцию move() библиотеки Б, а Б двигает юнита
Способ События:
Библиотека Б подписывается на событие "move" и при его срабатывании двигает юнита
Библиотека А ждет нажатие кнопки и создает событие "move"
Отличие:
Попробуй удалить одну из библиотек не меняя их внутреннего кода. Прямой вызов придется переписывать
Преимущество в том, что на move могут подписаться многие библиотеки, при этом А не должна ничего о них знать
По этому объяснению я не понял в чем разница между триггерами, мы же по сути создавая триггер и подписываемся на разные события.
Ну да, оказалось все намного сложнее, первый мой пример - ошибка. Если не вызывать thistype.allocate() то переменным не будет выделяться память, однако все можно решить через хэш-таблицу и переопределение свойств класса через оператор.
Если есть желание обозвать свойства класса также как и нативки - это можно, но через костыль в виде дополнительного приватного имени, ибо jusshelper багует и пытается обозвать вызванную функцию внутри класса именем метода, даже без обращение через this.~ . прошерстил весь хайв, решения без костыля не нашел.
Также как и не нашел способа возвращать handle unit'а при стандартном обращении , аля "немой" оператор. Решение через оператор unit , самое оптимальное
Я делал другой класс, который обрабатывает одномерные массивы юнитов group_alpha[номер юнита] , я хотел сделать методы для этой структуры , которые бы сохраняли в хэш-таблицу параметры юнита group_alpha[номер юнита].saveinteger(childid, integer) , и при присваивании присваивались через хэштаблицу также и все параметры group_alpha[номер юнита_1] = group_alpha[номер юнита_2]. Со вторым проблем нету, а вот с первым незадача.
Забей на структуры, в 99% случаев можно и без них обойтись.
У меня несколько библиотек, которые выполняют все это без структур, да. И я понимаю, что можно. Структура мне нужна , что бы 10 раз не переписывать одни и те же вещи. Аля проверка умер ли юнит из массива, если умер то на его место поставить последнего юнита из массива и разные методы дополнительные, которые работали бы через наследование.
пока адекватным решением для меня является следующее
struct UNIT
private unit un
method operator unit takes nothing returns unit
return this.un
endmethod
method SetPosition takes real X,real Y returns nothing
call SetUnitPosition(this.un, X, Y)
endmethod
static method create takes unit un returns UNIT
local UNIT this = GetHandleId(un)
set this.un = un
return this
endmethod
endstruct
Если в этом примере определение оператора unit можно заменить "немым" оператором, это будет решение
Потом очень полезная функция из теша это function list. Мне система better triggers не очень нравится именно из-за того , что там эта функция отсутствует. Часто забываешь названия функций, нужно напомнить себе. Часто помогает найти функцию в гуи , перевести в текст. В сторонней среде разработки, естественно, это невозможно, поэтому function list был бы очень хорош.
Koladik, а что за поддержка нужна? Грамматика для vJass и Zinc присутствуют, а компиляцией в JASS может и сам JassHelper справится. В IDEA уже есть все необходимые инструменты для запуска скриптов.
Ну у меня есть привычка в теше сохранять карту, включая джас хелпер, и проверять все ли нормально компилируется. Он на ошибки указывает конкретные в коде и примерное место ошибки. Обычно это реализуют так, что не понятно где ошибка, не компилируется и все. А джас хелпер хорошо в этом помогает.
Моментально. Единственное, что тестить, надо было не в инициализации, но и тем все нормально. Интересно , это реально было, или я просто заблуждался на пустом месте.
Для "динамических" хэштаблиц можно использовать наработку Vlod'a - Hashtable 8000
спасибо за наводку
Внесу ясность для чего это вообще спрашивается. Нужно подгружать N массивов Размером L*L>256^2, затем, подгружая каждый массивов, перемножать, складывать с другим массивом. Есть ощущение, что такое динамически можно только на хэштаблицах. Но я, честно говоря, немного плаваю в базе хэштаблиц. И не понимаю как это будет по скорости и вписывается ли это в ограничения.
Потесть, возможно, если в другую карту создашь то тоже не будет видно. Раньше баг был, что некоторые исправления подобного рода перетекали из карты в карту пока в вар3 не перезайдешь. Вроде названий игроков в лобби.
Дело в том., что в рефордже появилась возможность конкретные фреймы убирать, без затрагивания констант игровых.
Ты можешь записывать каждое создаваемое дерево как отдельный разрушаемый объект (в переменную), и так же записывать время его жизни (для таймера).
В момент каста просто создаёшь таким образом N деревьев и всё.
По таймеру чекаешь все деревья и их время жизни, если оно дошло до нуля - ломаешь дерево.
До мультеприменимостьи твой пример развить надо, хэштаблица, наверное, верный совет. Нужно все номера созданных деревьев в хэштаблицу этого таймера запихнуть. Тогда будет как надо, и удалять те что загрузятся при окончании таймера.
Ну добавь птиц, зверей бродящих, окружение различное, что тут еще можно посоветовать :D
Вот в том и дело что всё это есть!Но всеровно не то.
Если ты перфекционист , то покажи карту друзьям может они увидят нереальную глубину жизни , которую ты уже не видиш сам из-за того , что глаз замылелся. Это не ирония, реально помогает.
Проблема в том, что твои крипы нейтрально-враждебные у них есть так называемый лагерь преследования. Если хочешь сделать так, чтобы они шли до талого, делай их игроками.
Что мешает объявлять в своей библиотеке глобалки и использовать инициализатор для них? Или здесь более сложный случай?
Случай то тривиальный. Тут любой спел-чаннел, как пример, подойдет. Если использовать способность в двух местах карты одновременно, ну банальный близзард мага, то в этих двух местах звук дождя будет слышен, если использовать 3д звук, а во всей остальной карте нет. Так вот, такое можно реализовать триггерно с только если инициализировать массив звуков. Но вопрос заключается в том, действительно предложенная выше функция очищает память от handle'а звука при удалении, в принципе это можно проверить самому просто инициализируя ОЧЕНЬ много звуков без удаления до вылета варкрафта, а потом сравнить с удалением. Но это всё-таки запарно, я надеялся, что кто-то работал с похожими вещами.
Koladik, не через пару секунд, насколько я помню, если у модели спецэффекта присутствует только анимация birth (опционально death?), спецэффект можно удалять сразу же после создания, анимация завершится и спецэффект удалится; если модель не соответствует этим требованиям, спецэффект придется удалять после того, как пройдет анимация stand (+birth?), иначе никакого визуального эффекта не будет.
А зачем звуки динамически создавать? В редакторе звуков заранее создаются все нужные звуки и проигрываются когда нужно.
Я проверю с одной анимацией, даже интересно, я проверял только когда две анимации. Но мне кажется, что ее заного можно будет запустить после удаления, если анимация короткая.
Звук создавать динамически затем, что бы удобно было копировать алгоритм, создал в одной своей карте систему и легко ее перетащил в любую другую без захламления переменных в редакторе звука, так как динамически ты все записываешь напрямую через путь звука. Плюс, я сейчас тестировал вообще воспроизведения звука в варике. Одну переменную получается можно "приклеить" только к одной точке на карте, чтобы воспроизводился 3д звук. А если хочешь, чтобы один и тот же звук воспроизводился в двух местах сразу то нужна еще одна переменная.
Мне пока непонятно многое в воспроизведении звука в варике, поэтому могу в чем-то ошибаться. Но то, что динамически создавать переменную самостоятельно намного удобнее, чем отдавать все на откуп редактору звука, я уверен.
» WarCraft 3 / eventDispatcher - Диспетчер Событий
» WarCraft 3 / Как дополнить методами структуру unit?
» WarCraft 3 / Как дополнить методами структуру unit?
» WarCraft 3 / Как дополнить методами структуру unit?
» WarCraft 3 / 16. Функция как объект
» WarCraft 3 / 16. Функция как объект
» WarCraft 3 / Кривая Безье
» WarRaft / IntelliJASS
» WarRaft / IntelliJASS
» WarRaft / IntelliJASS
» WarCraft 3 / Как дать приказ юниту на которого применили способность?
» WarCraft 3 / 4. Директива //! inject
» WarCraft 3 / Так много ли по итогу памяти жрет инициализация хеш-таблицы?
Ред. Koladik
» WarCraft 3 / Так много ли по итогу памяти жрет инициализация хеш-таблицы?
» WarCraft 3 / Hashtable 8000
» WarCraft 3 / Так много ли по итогу памяти жрет инициализация хеш-таблицы?
» WarCraft 3 / Проверка проходимости юнита
Ред. Koladik
» WarCraft 3 / Почему предмет не использует 2 способности одновременно
» WarCraft 3 / Как скрыть надпись "Заклинание ещё не готово"?
» WarCraft 3 / Способность фуры из Доты
Ред. Koladik
» WarCraft 3 / Эффект жизни
» WarCraft 3 / Эффект жизни
» WarCraft 3 / Нападение крипов на героев
» WarCraft 3 / Уничтожение Handle sound'a
» WarCraft 3 / Уничтожение Handle sound'a
Мне пока непонятно многое в воспроизведении звука в варике, поэтому могу в чем-то ошибаться. Но то, что динамически создавать переменную самостоятельно намного удобнее, чем отдавать все на откуп редактору звука, я уверен.