[СТАТЬЯ] Уменьшение лагов в карте
|
|
PUVer | Дата: Воскресенье, 23 Мая 2010, 00:35:41 | Сообщение # 26 |
Сухопутные крысы!
Группа: Модераторы
Сообщений: 4462
Награды: 8
Репутация: 1845
Блокировки:
| Quote (Banzay89) Освобождает вар от такой рутинной работы, как запись реплеев в даной карте, тем самым бросив все силы вара на обработку кода и прочего Как вариант неплохо)Но многие любят записывать реплеи и я уверен, что столкнувшись с такой штукой они будут несколько огорчены...
|
|
|
|
Banzay89 | Дата: Воскресенье, 23 Мая 2010, 12:54:58 | Сообщение # 27 |
9 уровень
Группа: Проверенные
Сообщений: 858
Награды: 1
Репутация: 77
Блокировки:
| Quote Как вариант неплохо)Но многие любят записывать реплеи и я уверен, что столкнувшись с такой штукой они будут несколько огорчены... Ну это на тот случай, если автору пох на реплеи))) Я так всегда делаю)))
|
|
|
|
SirNikolas | Дата: Воскресенье, 30 Мая 2010, 14:56:11 | Сообщение # 28 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| А как обнулять "Pick every unit in unit group"?
|
|
|
|
[DUОS] | Дата: Воскресенье, 30 Мая 2010, 15:19:40 | Сообщение # 29 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| SirNikolas, Перед этой строчкой написать кастом скриптом: set bj_wantDestroyGroup = true
|
|
|
|
kaisar | Дата: Понедельник, 31 Мая 2010, 17:39:31 | Сообщение # 30 |
9 уровень
Группа: Проверенные
Сообщений: 814
Награды: 0
Репутация: 91
Блокировки:
| премного благодарен.
|
|
|
|
MaHBe | Дата: Четверг, 03 Июня 2010, 11:35:47 | Сообщение # 31 |
7 уровень
Группа: Проверенные
Сообщений: 260
Награды: 2
Репутация: 138
Блокировки:
| Quote (Banzay89) call DoNotSaveReplay() при инициализации карты Из статьи ничего нового, а вот ЭТО интересно)
|
|
|
|
Banzay89 | Дата: Четверг, 03 Июня 2010, 19:37:43 | Сообщение # 32 |
9 уровень
Группа: Проверенные
Сообщений: 858
Награды: 1
Репутация: 77
Блокировки:
| Quote call DoNotSaveReplay() самому понравилось, когда нашел такое=)
|
|
|
|
MrakinBlack | Дата: Четверг, 19 Мая 2011, 08:00:25 | Сообщение # 33 |
3 уровень
Группа: Пользователи
Сообщений: 66
Награды: 0
Репутация: 3
Блокировки:
| Quote (PUVer) Как вариант неплохо)Но многие любят записывать реплеи и я уверен, что столкнувшись с такой штукой они будут несколько огорчены... Quote (Banzay89) Ну это на тот случай, если автору пох на реплеи))) Я так всегда делаю))) А почему бы не потрудиться сделать диалог для откл или вкл записи реплея? Кому надо из игроков - те отключат чтобы быстрее шло! Кому ненадо из игроков - те включат чтобы реплэем потом хвастаться! сделать наработку что ли? (задумался о целесообразности)
Мир - Игра с непонятным сюжетом и странной графой. Карта которую делаю: Fight of Shinoby Taskete Hime v1.43b Ландшафт: 50% Триггеры: 70% Итемы: 85% Герои: 95% (для первый тест) Оптимизация: 30%
|
|
|
|
SirNikolas | Дата: Четверг, 19 Мая 2011, 14:05:53 | Сообщение # 34 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| MrakinBlack, эту функцию можно использовать только при инициализации, так что диалогами не получится. Можно, правда, привязать включение записи ролика к map flag'ам, вроде "Случайный выбор героев" и проч.
|
|
|
|
MrakinBlack | Дата: Пятница, 20 Мая 2011, 07:21:52 | Сообщение # 35 |
3 уровень
Группа: Пользователи
Сообщений: 66
Награды: 0
Репутация: 3
Блокировки:
| Quote (SirNikolas) MrakinBlack, эту функцию можно использовать только при инициализации, так что диалогами не получится. Можно, правда, привязать включение записи ролика к map flag'ам, вроде "Случайный выбор героев" и проч. действительно жаль... интересно, а есть команда включения записи реплея? тогда вообще всё просто было бы. В итоге, чтобы избежать лагов придёться всё таки переходить на локальные и на Джасс.
Мир - Игра с непонятным сюжетом и странной графой. Карта которую делаю: Fight of Shinoby Taskete Hime v1.43b Ландшафт: 50% Триггеры: 70% Итемы: 85% Герои: 95% (для первый тест) Оптимизация: 30%
|
|
|
|
BublGum | Дата: Четверг, 23 Февраля 2012, 20:42:25 | Сообщение # 36 |
5 уровень
Группа: Проверенные
Сообщений: 121
Награды: 0
Репутация: 25
Блокировки:
| call RemoveLocation на самом деле это ложь! ничего эта команда не удаляет по крайне мере так написано в статье ФКОФА
|
|
|
|
Ty3uK | Дата: Четверг, 23 Февраля 2012, 21:19:07 | Сообщение # 37 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Все она удаляет, это можно проверить счетчиком хэндлов
|
|
|
|
SirNikolas | Дата: Пятница, 24 Февраля 2012, 18:28:16 | Сообщение # 38 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| BublGum, с ней все нормально. А вот DestroyForce, DestroyGroup и bj_wantDestroyGroup действительно ничего не делают.
|
|
|
|
Impregnable | Дата: Пятница, 24 Февраля 2012, 19:21:54 | Сообщение # 39 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| Quote (SirNikolas) А вот DestroyForce, DestroyGroup и bj_wantDestroyGroup действительно ничего не делают
Ах ну да Близы же криворукие придурки(мы бы написали war лучше, но что-то...) и эти нативки создали от ... делать
Загляни на 10 минуте в Диспетчер задач Code function DestroyGroupWhy takes nothing returns nothing local group gr = CreateGroup()
call GroupEnumUnitsInRange(gr, 0, 0, 9000, null)
set gr = null endfunction
function q takes nothing returns nothing local integer i = 0
loop call TimerStart(CreateTimer(), .04, true, function DestroyGroupWhy)
set i = i + 1 exitwhen i == 50 endloop endfunction
P.S. Я, конечно, извиняюсь, но уже надоело видеть подобное.
|
|
|
|
Ty3uK | Дата: Пятница, 24 Февраля 2012, 19:59:56 | Сообщение # 40 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Может все дело в том, что надо сначала заглянуть внутрь бж и включить мозг, а не задвигать псевдоумные вещи. Ник говорит про массовое заблуждение о том, что при пике юнитов в группу с помощью бж (на гуи именно так и происходит) идет утечка локальной переменной. И все, умничать не надо, а сарказм не нужен никому -_-
|
|
|
|
Impregnable | Дата: Пятница, 24 Февраля 2012, 20:32:29 | Сообщение # 41 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| Ладно "попытаюсь включить мозг" - с DestroyGroup идет утечка локальное переменной, а DestroyForce наверное опечатка. Теперь все сходится. Вопросов больше нету...
|
|
|
|
Ty3uK | Дата: Пятница, 24 Февраля 2012, 20:38:10 | Сообщение # 42 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Нет, утечка идет не с DestroyForce(), а с бж на пик юнитов. Из-за утечки локальной переменной в ней юзать функу уничтожения группы почти нет смысла. Вот и все Добавлено (24 Февраль 2012, 20:38:10) --------------------------------------------- Фу, очепятка- DestroyGroup()
|
|
|
|
Impregnable | Дата: Суббота, 25 Февраля 2012, 05:42:07 | Сообщение # 43 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| Ty3uk напиши, что ты не серьезно. А вообще хотелось бы прочитать, что скажет Сам SirNikolas.
|
|
|
|
Ty3uK | Дата: Суббота, 25 Февраля 2012, 09:09:46 | Сообщение # 44 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| warcraft3ft.info/forum/22-35043-3 уже обсуждали. Ник там все сказал
|
|
|
|
SirNikolas | Дата: Воскресенье, 26 Февраля 2012, 08:21:52 | Сообщение # 45 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Code //=========================================================================== function GetForceOfPlayer takes player whichPlayer returns force local force f = CreateForce() call ForceAddPlayer(f, whichPlayer) return f endfunction
//=========================================================================== function GetPlayersByMapControl takes mapcontrol whichControl returns force local force f = CreateForce() local integer playerIndex local player indexPlayer
set playerIndex = 0 loop set indexPlayer = Player(playerIndex) if GetPlayerController(indexPlayer) == whichControl then call ForceAddPlayer(f, indexPlayer) endif
set playerIndex = playerIndex + 1 exitwhen playerIndex == bj_MAX_PLAYER_SLOTS endloop
return f endfunction
//=========================================================================== function GetPlayersAllies takes player whichPlayer returns force local force f = CreateForce() call ForceEnumAllies(f, whichPlayer, null) return f endfunction
//=========================================================================== function GetPlayersEnemies takes player whichPlayer returns force local force f = CreateForce() call ForceEnumEnemies(f, whichPlayer, null) return f endfunction
//=========================================================================== function GetPlayersMatching takes boolexpr filter returns force local force f = CreateForce() call ForceEnumPlayers(f, filter) call DestroyBoolExpr(filter) return f endfunction Возвращается локальная переменная. Не обнуляется. Ссылка остается висеть в памяти. Сколько не юзай DestroyForce, объект не удалится.
|
|
|
|
Impregnable | Дата: Воскресенье, 26 Февраля 2012, 11:46:45 | Сообщение # 46 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| Quote (SirNikolas) Возвращается локальная переменная. Не обнуляется. Ссылка остается висеть в памяти. Сколько не юзай DestroyForce, объект не удалится.
Опять же приведу пример: Code function DestroyGroupWhy takes nothing returns nothing local force f = CreateForce() endfunction
function q takes nothing returns nothing local integer i = 0
loop call TimerStart(CreateTimer(), .04, true, function DestroyGroupWhy)
set i = i + 1 exitwhen i == 100 endloop endfunction и Code function DestroyGroupWhy takes nothing returns nothing local force f = CreateForce() call DestroyForce(f) endfunction
function q takes nothing returns nothing local integer i = 0
loop call TimerStart(CreateTimer(), .04, true, function DestroyGroupWhy)
set i = i + 1 exitwhen i == 100 endloop endfunction
Думаю, по разнице занимаемой памяти в Диспетчере задач будет ясно, что DestroyForce(и подобные нативки) не для красоты. А что касается того, что не обнуляется переменная, то тут есть вполне логическое объяснение, но кому это интересно...
|
|
|
|
Ty3uK | Дата: Воскресенье, 26 Февраля 2012, 12:39:21 | Сообщение # 47 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| А теперь функцию таймера замени на функцию, которая будет возвращать группу игроков и возвращай локальную группу. Сколько ты не будешь юзать функу уничтожения там, в функции вызова- эффекта не будет. Я уже это третий раз говорю. А если уничтожать группу после ее создания внутри той же функции, то офк толк будет, не держи нас за умалишенных Добавлено (26 Февраль 2012, 12:39:21) --------------------------------------------- Был бы с компа- написал бы пример, на который стоит ориентироваться, раз ты так сильно уверен в нашей неправоте, но увы не могу
|
|
|
|
Impregnable | Дата: Воскресенье, 26 Февраля 2012, 13:06:27 | Сообщение # 48 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| Так чтоли? Code function GetForce takes nothing returns force local force f = CreateForce() return f endfunction
function Test takes nothing returns nothing local force f = GetForce()
call DestroyForce(f)
set f = null endfunction
function q takes nothing returns nothing local integer i = 0
loop call TimerStart(CreateTimer(), .04, true, function Test)
set i = i + 1 exitwhen i == 100 endloop endfunction Результат тот же. Да и странно видеть как вы, пользуясь, тем, что сделали программисты, считаете, себя умнее их и лучше разбираетесь в их же продукте.
|
|
|
|
Ty3uK | Дата: Воскресенье, 26 Февраля 2012, 13:12:37 | Сообщение # 49 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Пруф что я считаю себя умнее Добавлено (26 Февраль 2012, 13:12:37) --------------------------------------------- Результат надо проверят не через диспетчер задач, а через счетчик утечек. Если он покажет, что хэндл не съезжает хотя бы на 1 цифру- я не прав. И насколько я знаю, пустая группа занимает меньше памяти, чем заполненная (могу ошибаться)
|
|
|
|
Impregnable | Дата: Воскресенье, 26 Февраля 2012, 14:15:06 | Сообщение # 50 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| Quote (Ty3uk) Пруф что я считаю себя умнее Я вроде бы не переходил на личности. Да и я уверен ты понял, что я имел ввиду.
Quote (Ty3uk) Результат надо проверят не через диспетчер задач, а через счетчик утечек Что-то ты отошел от темы спора "DestroyForce, DestroyGroup и bj_wantDestroyGroup действительно ничего не делают". Уф, замучил ты меня: каждый раз приходится тестить. Результат - без уничтожения объектов war жрет много памяти, а ведь не у всех мощные компьютеры.
Quote (Ty3uk) И насколько я знаю, пустая группа занимает меньше памяти, чем заполненная (могу ошибаться) Возможно. Тестить не хочу. А причем тут это?
|
|
|
|