XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
SiT3D

offline
Опыт: 1,514
Активность:
Что же всё таки выгоднее.
В общем 2-3 простых вопроса.
  1. Что выгоднее произвидительнее и даёт меньше нагрузки на проц. Структуры или параллельные массивы? Скажем если таких массивов штук 20, в основном числовые данные.
  2. Что делать если лагает при формировании группы, выбор юнита, и выбор юнитов вокруг каждого выбранного юнита. Либо даже просто выбор юнитов, вокруг 10-15 юнитов из массива, в области 200( разумеется с выполнением операций над этии счастливчиками =) ). При условии, что выполняются ещё разные операции, вызывает неприятные подлагивания. Как быть?
  3. Что быстрее использовать группы с юнитами, или хранить необходимых юнитов в массиве юнитов?
Старый 25.08.2013, 03:38
MpW

offline
Опыт: 49,995
Активность:
SiT3D,
1-3 четкого ответа не существует, смотря как ты строишь алгоритм. Надо смотреть на ситуации, так не не могу сказать.

Можешь код в показать,. там, где у тебя подлагивает.

Steal nerves добавил:
SiT3D, я вот делал так
2) Если триггер совершает работу периодически, то делал так. Если работа постоянна, то объявил две глобалки типа группа, создал группы. И с ними манипулировал. Перебирал тех, кто в первой группе через цикл, выбирал во вторую группу всех, кто находится рядом с юнитами из первой группы. То есть не нужно каждый раз объявлять локалку типа группа и заново создавать группу. Хватает и этого, лишние операции (объявление локалок, создании удаления групп). иначе если работа не постоянна (работает в конкретных случаях, например при касте) бы я бы отключал, когда не нужно это. Хотя я массивы не люблю и из-за перебора цикла. Если брать массивы (пусть даже двойные), то там каждый раз идет перебор через цикл (если не знать от чего брать элементы массивов). сравниваешь есть, нет и так далее. Но я не говорю, что группы лучше, смотря по ситуации.

Отредактировано Steal nerves, 25.08.2013 в 04:23.
Старый 25.08.2013, 04:15
DioD

offline
Опыт: 45,134
Активность:
кое кто днище, структуры это и есть параллельные массивы.
что весит больше, килограмм гвоздей или килограмм гвоздей?
Старый 25.08.2013, 05:45
SiT3D

offline
Опыт: 1,514
Активность:
Спасибо. Диод я это и хотел выяснить. не надо ругаться) не в переборе массива не подлагивает только если двигаю сразу юнитов 60 70 чуть начинается мне просто было интересно можно ли улучшить ситуацию.
SiT3D добавил:
можно закрывать пасяб
Старый 25.08.2013, 14:36
DioD

offline
Опыт: 45,134
Активность:
если у вас алгоритм отстрой то лагать будет всё равно, хоть массивы, хоть структуры...
Старый 25.08.2013, 15:04
SiT3D

offline
Опыт: 1,514
Активность:
Ну не только отстойность алгоритма решает =))) я 100 юнитов перемещаю им. Вот и лагает тогда. Думал можно 200 перемещать одновременно, но таких высот варик не даст
Старый 25.08.2013, 15:26
iZetox

offline
Опыт: 7,067
Активность:
SiT3D:
200
перемещал 200 тел в 3d с небольшой физикой на старом компе, особо не лагало. а у тебя 100 лагает. делай выводы
Старый 25.08.2013, 16:30
SiT3D

offline
Опыт: 1,514
Активность:
Лол чёт мне с трудом верится, чтобы ты перемещал 200 юнитов каждые 0.02 сек ... и у тебя не было лагов.
Старый 25.08.2013, 17:38
Doc

offline
Опыт: 63,163
Активность:
У меня 400 снарядов в 3д которые сталкивались друг с другом не лагали типа... У кого-то кривые рученьки.
Старый 25.08.2013, 18:28
SiT3D

offline
Опыт: 1,514
Активность:
А ну дайте эти чудесные коды
SiT3D добавил:
Я не понимаю, в чём там вообще может быть кривость...
SiT3D добавил:
В общем подправил кое что, напрямую стал таймер удалять, теперь меньше лагает. Теперь лаги начинаются на 150-200 юнитах. Они не сильные но мышка чтановится чуть чуть медленее в движении.
SiT3D добавил:
Проблема в том что у меня функция огромная, много сравнений и прочего. Надо её разбить на участки, и юзать только нужные, а не проверять всё каждый раз, оно конечно влияет. + желательно походу избегать вызовы некоторых функций других.
SiT3D добавил:
Потому как закомментировал большую часть кода, оставил только ту где само движение, но и там можно было бы сравнения закоментить некоторые то получил % 20 быстрее стало работать... но лаги не такие что прям слайды... вы там не думайте )))
SiT3D добавил:
Ещё сократил время с 0.02 до 0.04 но это не гут конечно.
SiT3D добавил:
Однако есть проблема, если я розобью функцию, на кусочки, то мне возможно не хватит 1 таймера на юнита. Потому что нужно будет выполнять ещё другие функции.
SiT3D добавил:
Правда используя мод движения Где оно уставливается через UnitSetX и UnitSetY лаги на 350 юнитах, такие же как при SetUnitPosition но 200 юнитах не сильные но немного замедляется мышка.

Отредактировано SiT3D, 25.08.2013 в 19:33.
Старый 25.08.2013, 19:28
adic3x

offline
Опыт: 108,439
Активность:
то мне возможно не хватит 1 таймера на юнита
А у вас на каждого юнита свой таймер что-ли?
Старый 25.08.2013, 19:36
SiT3D

offline
Опыт: 1,514
Активность:
В общем спс, надо будет ещё чтото в ней подправить.
Ну да на каждого юнита. В нём ID записан юнита.
SiT3D добавил:
Можно 1 таймер, а внутри цикл по всем ID пробегать, потому как в массиве всё равно только юниты на которых воздействует движение.
SiT3D добавил:
но это разве лучше?
Старый 25.08.2013, 19:44
adic3x

offline
Опыт: 108,439
Активность:
но это разве лучше?
Намного.
ADOLF добавил:
Тут как-раз то самое узкое место, где оптимизация может быть уместна.
Старый 25.08.2013, 19:47
MpW

offline
Опыт: 49,995
Активность:
SiT3D, когда много таймеров одновременно работает - подлагивает. Там еще помимо созданных, работают близовские стандартные таймеры, и еще где-то твои в других кодах, и получается очень много. Не только из-за утечек и больших кол-во объектов лаги бывают.
Старый 25.08.2013, 19:48
SiT3D

offline
Опыт: 1,514
Активность:
Ок попробую сделать на 1 таймер... большое спасибо, всё таки пиз***ля двигатель прогресса =)) щас посуду мыть потом отпишусь =)
SiT3D добавил:
хз хз переделал на 1 таймер и цикл, чёт не сказал бы что лучше работать стало. Правда заметил что ещё подлагивает даже изз того что просто много юнитов стоит, 300 создаётся, если камера в стороне, то норм, а как юнитов видно то подлагивает.
SiT3D добавил:
Ааххаха красиво получилось =))))) В общем если на них не смотреть, вообще не лагает, 400 создал, и пока до меня долетели всё пучком было.
SiT3D добавил:
Но с другой стороны появился баг или он и был, когда не все почему то двигаются. Щас гляну. Нет кажись порядок, но вот фаталка иногда вылетет, когда юниты за игровую карту вылетают походу. А так всё хорошо работает. Остаось подправить функции высоты и фирулясных движений =) дякую усим за допомогу =)
SiT3D добавил:
Итог:
  1. Юзать лучше всего SetUnitX (минус только в том что они за карту вылетают и фаталит)
  2. Не использовать локации
  3. Чем меньше таймеров тем проще жизнь =))
Результат:
При 400 юнитах, нет лагов. Только если смотреть на них. Спасибо всем за помощь. Больше не ставил.

Отредактировано SiT3D, 25.08.2013 в 20:52.
Старый 25.08.2013, 21:05
adic3x

offline
Опыт: 108,439
Активность:
Но с другой стороны появился баг или он и был, когда не все почему то двигаются.
Поток может умирать, разбивайте тогда на несколько вызовов с помощью ExecuteFunc.
Юзать лучше всего SetUnitX (минус только в том что они за карту вылетают и фаталит)
Создайте константы или макроопределения, в которые забейте размер карты. При движение проверяйте, не выходит ли новая позиция юнита за границы карты.
Старый 25.08.2013, 22:10
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 22:34.