ARHUI
offline
Опыт:
3,341Активность: |
Заклинание с прожектилом. Лаги.
Башня стреляет с атакой 0, определяется какая башня (из 5 уровней) стреляла, вычисляется коэффициент k, который задает эти уровни для урона и отбрасывания, появляется даммик который летит к юниту, по которому башня стреляла, если юнит-цель умер во время полёта даммика, то он все равно долетает до его позиции и взрывается. При взрыве последовательно увеличивается радиус области, каждый раз берутся юниты в области, даммик наносит им урон, и позиция юнита меняется. Все просто в теории...
Играло нас 8 человек... Башен было штук 15, но лаги были шопясдох. Оперативы вар выделил 900 метров! Я подумал, что скорей всего даммики не удаляются, но нет! Проверив их численность после тестового запуска с ~40 башнями и ~300 крипами, я убедился, что даммики удаляются, то есть после сумасшедших лагов количество даммиков на карте равнялось 0. Все умершие крипы через 0.7сек удаляются из игры, однако после такого тестового побоища, которое длилось около минуты, оперативы съедено было 350 метров.
» Вот код, подскажите где я там совершил те ужасные ошибки, которые приводят к не менее ужасным лагам?
ARHUI добавил: Кода много, но в основном там повторения - сначала сделаю чтобы работало, потом напишу нормально... |
30.04.2011, 23:02 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Faion
Noblesse Oblige
offline
Опыт:
30,395Активность: |
Код:
Что за индийский код? Тебе за каждую строчку кода отдельно платят чтоли? Или попросту религия не позволяет сделать так: Код:
dummy нигде не удаляешь >_< Дальше не стал смотреть, т.к. эт ппц. |
30.04.2011, 23:16 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ARHUI
offline
Опыт:
3,341Активность: |
Dummy передается, так сказать, из рук в руки и удаляется ф-ей взрыва
|
30.04.2011, 23:21 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Faion
Noblesse Oblige
offline
Опыт:
30,395Активность: |
ток не обнуляешь переменную dummy и вообще, юзай глобалки, что б в каждой функции заново не обновлять одни и те же значения.
|
30.04.2011, 23:32 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ARHUI
offline
Опыт:
3,341Активность: |
Башни не подряд бьют, а когда придется, поэтому не нахожу способа использовать глобальные переменные, может поподробней? |
01.05.2011, 01:31 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Zanozus
Уехал учиться
offline
Опыт:
8,512Активность: |
ко второму посту могу еще предложить заменить пик на событие Unit Comes Within Range. думаю при массовом применении это уменьшит лаги. |
01.05.2011, 11:46 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Doc
offline
Опыт:
63,163Активность: |
fastfix* |
01.05.2011, 13:02 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Zanozus
Уехал учиться
offline
Опыт:
8,512Активность: |
с чего вдруг это создаст огромнейшие лаги ? 1 раз при создании снаряда повесить на него событие Unit Comes Within Range и двигать его к цели + можно еще сделать чтобы снаряд сталкивался с другими юнитами или просто наносил им урон, достаточно 1 условие добавить Отредактировано Zanozus, 01.05.2011 в 14:40. |
01.05.2011, 14:35 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Doc
offline
Опыт:
63,163Активность: |
Zanozus, это баг вара, серьезно. много юнитов с таким событием -> один входит в радиус -> лаг на секунду. я просто тоже думал, что это лучше чем периодики, а в итоге вышла фигня. |
01.05.2011, 14:57 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Zanozus
Уехал учиться
offline
Опыт:
8,512Активность: |
это в сетевой игре ? просто в одиночном тесте такого не было даже на моем старом полуживом компе с 50 снарядами на карте. Отредактировано Zanozus, 01.05.2011 в 15:27. |
01.05.2011, 15:17 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Doc
offline
Опыт:
63,163Активность: |
Zanozus, в одиночной. ну у меня не 50 было, около сотни. |
01.05.2011, 15:28 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Zanozus
Уехал учиться
offline
Опыт:
8,512Активность: |
около 100 ?! скачал свой старый гейзер из библиотеки, запустил, понатыкал гейзеров, где-то после 100 сбился со счета. Протащил крипов по гейзерам, разницы совершенно никакой что 1 что >100. Может дело не в событии ? а то что передвигается больше 100 снарядов ? Возможно дело в спец. эффекте который появляется в событии, было такое пару раз. Или утечка. Можешь скинуть пример в личку ? Отредактировано Zanozus, 01.05.2011 в 15:58. |
01.05.2011, 15:49 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Doc
offline
Опыт:
63,163Активность: |
нет примера нету к сожалению. |
01.05.2011, 17:04 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ARHUI
offline
Опыт:
3,341Активность: |
Тоесть совет такой: изменить функцию взрыва - передавать в ExplosionActions из InitExplosionWave ещё и группу единожды взятых в конечном радиусе крипов, а в ф-ии ExplosionActions перебирать уже взятую группу и смотреть расстояние крипа от центра и если:
CurrentRadius > GetUnitX(enemy) + ( CosBJ(AngleBetweenPoints(Location(EpicenterX, EpicenterY), GetUnitLoc(enemy))) * MoveDistance )
то работать с этим крипом?
Таким образом убрать многократный GroupEnumUnitsInRange.
По поводу спецэффектов - у даммика нестандартная модель весом 20 кбайт, но разве это не "железная" проблема?
Кстати ForGroup быстрее чем loop-ом перебирать?
ARHUI добавил:
Есть причины чтобы группа не передавалась через hashtable ? ARHUI добавил: с группой разобрался |
01.05.2011, 18:55 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ARHUI
offline
Опыт:
3,341Активность: |
Решил проблему - тормоза были из-за движения прожектилов... ПОставил у башни снарядом нужную модель, а взрыв в позицию цели, все тормозов нет... Можно закрыть. |
01.05.2011, 22:17 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|