Elf_Stratigo
offline
Опыт:
4,599Активность: |
Стрела не двигается и зависает
Код:
Парни, ПОМОГИТЕ ПЛЗ!!! Это 2 функции, обеспечивающие полёт, скажем, стрел, оно используется в карте Archers ES (мб кто знает...). Направление полёта задаётся во время создания. Никаких утечек в памяти мною не наблюдается. СКАЖИТЕ ПОЖАЛУЙСТА, ПОЧЕМУ НЕКОТОРЫЕ СТРЕЛЫ ЗАСТРЕВАЮТ!!!!! Причём нет, чтобы в фиксированных местах, при фиксированном времени, фиксированная по счёту... Они застревают полностью когда хотят!!! Причём за всю игру это может быть 1-5 стрел! По моим наблюдениям, стрела, если хочет застрять, застревает сразу после создания (ниразу не двигается). Эм, это код Archers ES - мб ктонить играл... Застревает<=>висит в воздухе всю игру (дамагу не наносит) Блин, я в шоке >< call UnitApplyTimedLife( whichUnit, 'BTLF', 8. ) - хоть не всю игру висеть будут ;( [+] замечание от ShadoW DaemoN: название темы не отражает суть вопроса
|
24.02.2009, 17:35 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Igores
НИИ 4А-Во! Кафедра Джасс.
offline
Опыт:
5,325Активность: |
Elf_Stratigo,
Почему стрела не наносит дамаг? У тебя группа не создается. Напиши в начале Код:
естественно дамагу не наносит, когда юниты которых нужно дамажить не заносятся в группу. Тут помоему еще один косяк, может быть так что одному и тому же юниту будет нанесен урон одной стрелой два раза, чтобы это убрать: сделай либо радиус ренджа поменьше либо увеличь период таймера(есть еще одна причина, частота человеческого глаза 24 кадра в секунду, а при таком периоде создается 50 кадров, то есть 26 кадров будет проигрываться компьютером просто так, а следовательно больше половины операций компьютер будет высчитывать зря, что тоже не есть хорошо) Почему стрела останавливается на месте и никуда не летит? Ты не показал откуда у тебя берется переменная nd, скорее всего изза этого, так как она влияет на движение. Еще вместо локейшна используй GetUnitX и GetUnitY. Цикл тут тоже лишний, лучше просто использовать приатаченные к таймеру хендлы в колбэк функции ForGroup(). Просто для сведения: это конечно мелочь, но все таки лучше один раз в самом начале перевести угол в радианы, а не два раза высчитывать его, для процессора на одну операцию меньше)) Вообщем если засесть нормально, то можно уменьшить код почти в два раза и увеличить производительность на 50%. Имхо, эти буржуйские функции кастрирования хендлов лишние, можно и без них обойтись. Ошибаешься, в коде есть одна утечка: Код:
лучше пиши сразу Код:
У тебя в спелле стрела летит на всю карту?)) Отредактировано Igores, 25.02.2009 в 04:37. |
25.02.2009, 04:14 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Vampirrr
O_o
offline
Опыт:
19,286Активность: |
Igores, после килла (разложения и прочих вещей) юнит ремувится. Здесь ремув будет лучше только потому, что стрела не умирает, ее просто нужно удалять. И соответсвенно делать set u = null
|
25.02.2009, 04:35 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Igores
НИИ 4А-Во! Кафедра Джасс.
offline
Опыт:
5,325Активность: |
Vampirrr, после смерти она все равно некоторое время будет забивать память, ее ведь не будут воскрешать, значит надо сразу ремувить.
Igores добавил: Блин, жаль редактора нет под рукой, так бы переписал спелл на русский манер)) |
25.02.2009, 04:40 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Vampirrr
O_o
offline
Опыт:
19,286Активность: |
Igores, не спорю, но предыдущий ответ к тому, что утечек КиллЮнит не вызывает..
|
25.02.2009, 04:55 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Igores
НИИ 4А-Во! Кафедра Джасс.
offline
Опыт:
5,325Активность: |
Vampirrr, ты прав, с этим я лажанулся))
|
25.02.2009, 04:59 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Elf_Stratigo
offline
Опыт:
4,599Активность: |
Код:
функция из blizzard.j содержит в се креайтгроуп :) Цитата:
о: спасибо :) Цитата:
из пустоты :) в части условия, которая решает, может ли двигаться стрела дальше есть: Код:
где dist задаётся - дальность полёта nd - скоко уже пролетела если нд меньше dist (даже если вдруг отрицательное), то стрела совершит движение иначе стрела будет уничтожена НО НИКАК НЕ ДОЛЖНА ЗАВИСНУТЬ! :((((((( nd получается по умолчанию равным 0 Цитата:
я использую location, т.к. она требуется для выше описанной функции GetUnitsInRangeOfLocMatching Цитата:
мне просто почемуто кажется, что функция ForGroup - "долгая" чтоли, но я мб неправ? :) просто подозрительно, када один из параметров функция, которая будет вызвана для каждого юнита - а тут вродь тоже самое, и вроде бы минимум вызовов... Цитата:
у всех уязвимых юнитов хп меньше 100 ))))) Мне нужен киллюнит, т.к. я отлавливаю это событие - допустим подожжёная стрела после своей смерти должна воспламениться... п.с. насчёт location - да, наверное нужно мясо из функции выдрать и перейти на GetUnitX и GetUnitY |
|||||
25.02.2009, 16:37 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Igores
НИИ 4А-Во! Кафедра Джасс.
offline
Опыт:
5,325Активность: |
Поробуй сделать тоже без бж и в координатах. Вообще, потерпишь ровно 24 часа? Я тебе завтра в это же время выложу свой вариант этой функции. |
26.02.2009, 00:44 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
agentex
offline
Опыт:
34,534Активность: |
Да и без кеша, мб там вобще на таймере хендл абсолютно другого обьекта возвращается..
По поводу фор груп: как раз таки она в разы быстрее цикла
набор в группу осуществляется функцией GroupEnumUnitsInRange() :/ |
26.02.2009, 00:57 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Elf_Stratigo
offline
Опыт:
4,599Активность: |
Цитата:
у меня нет выхода )) Цитата:
Дык скорее всего, вот я и хочу узнать, почему?! Ведь оно случается не постоянно... За всю игру игру может ни одна стрела не застрять, или застрять, но не больше 5... со всеми коментами, что были написаны, я переписал функцию ArrowMoveFunc так: Код:
udg_AMS_u - глобалка типа юнит udg_AMS_p - глобалка типа плеер udg_AMS_f - глобалка типа boolexpr, проходит инициализацию при загрузке: Код:
ток у меня возникло 2 вопроса: 1) получается udg_AMS_f - какоето константное условие, то будет ли нормально ArrowMoveFuncTargets фильтровать врагов, если внутри неё глобалка udg_AMS_p, ну тоесть, чтоб не было: игрок 1 убил игрока 7 (врага) игрок 7 убил игрока 8 (союзника) т.к. функция проверяла себя для игрока 1 2) а ничего, что я использую глобалки, от этого стрелы не будут "путаться" как-нибудь? ) насчёт периода таймера: у меня есть стрела, которая летит со скоростью 17. для периода .02 если я увеличу период таймера до .04, то не получится ли так, что при заданном радиусе повреждения стрела сможет пролететь "сквозь" лучницу, если её "физический размер (ucol)" есть 32. я собственно такой период и ставил, чтоб злостность не происходила, но мб этот параметр - "физический размер (ucol)" - вообще другая вещь, т.к. я лично не замечал, чтоб эт этого чтото зависило... п.с. стрелы всё ещё виснут :( |
||
26.02.2009, 12:22 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
agentex
offline
Опыт:
34,534Активность: |
Цитата:
дык ты их не напротяжении какогото времени юзаеш, а мгновенно, так что не будут Цитата:
нихрена не понял, напиши какие глобалки юзаются и где им присваиваются значения Цитата:
Хз я всегда ставлю 0.01 чтобы без дерганий всяких снаряд летел, ну максимум - это 0.05 Физический размер не учитывается при GroupEnumUnitsInRange, берется центр юнита GetUnitX\Y. |
|||
26.02.2009, 12:29 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Elf_Stratigo
offline
Опыт:
4,599Активность: |
Код:
лишнее выделение памяти - я обращаюсь туда ток 1 раз))) Цитата:
играет игрок1 против союз(игрок6, игрок7, игрока8) выстрел №1 whichUnit(игрок1,...) в результате стрелой убит герой игрока8 прошло время... выстрел №2 whichUnit(игрок6,...) на траектории стрелы стоит герой игрока7 --- она убьёт его? Цитата:
в своих версиях серии 4.2 я ставил .01 эт приводило к странному замедлению при полёт стрел (ну новички не заметят..) - хотя это мб изза корявой оптимизации)) ну и добавил сотую - чоуж) Цитата:
пасиб ) |
|||
26.02.2009, 13:23 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Igores
НИИ 4А-Во! Кафедра Джасс.
offline
Опыт:
5,325Активность: |
Код:
проверь этот код, должен работать)) вместо кеша сделал, через хэндлы, так быстрее)) Если честно, я его еще сам не проверял)) просто написал по памяти, так что могут быть синтаксические ошибки))) код работает для любого числа стрел. кстати, в твоем первом посте всетаки была утечка, ты не обнулял переменную du)) Igores добавил: вообще лучше переходи на хэндлы или массивы, таким методом восновном только буржуи пользуются)) Отредактировано Igores, 27.02.2009 в 02:50. |
27.02.2009, 02:55 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Elf_Stratigo
offline
Опыт:
4,599Активность: |
D:
большое спасибо, я даже твой ник добавлю в маленький уголочек кредитс в "заданиях" :) особенно весёлый прикол про "сначала занулить юнит, а потом его кил" ))) Цитата:
Цитата:
оно само обнулялось :) Цитата:
ну мне очень понравился код, токо если объяснишь, следующее, то буду переходить :) Цитата:
что это за число ) размер сегмента памяти - 65536 - здесь это както учтено? будет ли корректно работать это чудо, если я возьму число 0x010000 почему ты вычитаешь, ведь сложение работает быстрее кста, стрелы всёравно зависают, по крайне мере в той ситуации, на которой я енто всё проверял однако мне удалось обнаружить "повреждённую функцию", щас буду разбираться, но уже сам... если интересно, могу выложить... если ничё не пойму то опять к вам приду ) |
||||
27.02.2009, 17:34 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
alexkill
offline
Опыт:
19,072Активность: |
Цитата:
минимальный хэндл объекта (в данном случае таймера). Также можно использовать мин. хэндл триггера, юнита и т.п. Цитата:
это здесь не нужно Цитата:
и будут у тебя индексы массива с одним и тем же значением. подумай Цитата:
уже объяснил Igores, указал бы, кто научил =) |
||||
27.02.2009, 17:47 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Igores
НИИ 4А-Во! Кафедра Джасс.
offline
Опыт:
5,325Активность: |
Elf_Stratigo, без проблем обращайся, если что обращайся:) а еще лучше к алексу, он мне эту систему объяснял:-)
|
27.02.2009, 20:04 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|