Передвижение боевых единиц

Разговоры на любые темы

Передвижение боевых единиц

Сообщение Inex » Вт ноя 20, 2012 7:19 am

Раньше делал пошаговые стратегии. Теперь же решил real time.
Когда у меня выделен одна боевая единица и отправляется в конечную точку, то волновой алгоритм вызывается 1 раз. А если 2 и более единиц вызвано? Придется сделать под каждую единицу отдельный поток?
И как можно выделить более одной единицы сразу? Одну это понятно и сделано.
Inex
 
Сообщения: 2
Зарегистрирован: Вт ноя 20, 2012 4:43 am

Re: Передвижение боевых единиц

Сообщение Odin_KG » Вт ноя 20, 2012 11:19 am

Когда у меня выделен одна боевая единица и отправляется в конечную точку, то волновой алгоритм вызывается 1 раз. А если 2 и более единиц вызвано?

Для каждой единицы вызывается алгоритм построения пути. У вас образуется для каждой единицы полный путь до конца. Потом единица двигается по этому пути. Если возникают проблемы по ходу движения, то иногда путь нужно перестраивать полностью.

Придется сделать под каждую единицу отдельный поток?

Я бы вообще не стал сюда тащить никакие потоки. Всё управление объектами в памяти сделать на одном потоке. Вот всякую там "визуализацию" можно перенести в отдельный поток, т.е. задачу, которая совершенно отдельная. Или опрос сети... его тоже на отдельный поток выносим. Если же вы станете каждого юнита на отдельный поток вешать, то, думаю, ничего хорошего из этого не выйдет, особенно учитывая, что потоки не дадут никакого прироста в скорости, если у процессора не хватает для них ядер. В среднем сейчас вроде бы 4 ядра у процессора, и вроде бы еще есть Hyper-threading, который умножает количество ядер еще на 2. Вот и получается, что смысла в 1000 потоках нет никакого, я даже предполагаю, что это только вредит, так как процессор должен "прыгать" между этими потоками.

Если смотреть немного в будущее, то огромную проблему в RTS представляет отладка сетевой игры. Дело в том, что все компьютеры должны делать всё одинаково, а между ними по сети передаются только команды от мыши и клавиатуры. Так вот... я сомневаюсь, что на многопоточности вообще можно обеспечить полную повторяемость процесса на разных компьютерах, а это приведет к тому, что сеть просто рассинхронизируется, а отлаживать это дело весьма трудно и без многопоточности.
Аватара пользователя
Odin_KG
Administrator
Administrator
 
Сообщения: 841
Зарегистрирован: Чт янв 15, 2009 2:57 pm

Re: Передвижение боевых единиц

Сообщение Odin_KG » Вт ноя 20, 2012 11:24 am

И как можно выделить более одной единицы сразу?

Ну, берете массив указателей на ваши "единицы" и заполняете его этими указателями. У меня размер массива равен 300, что означает, что можно одновременно выделить 300 объектов. Команды, которые приходят от мыши применяете к этому массиву. В классе "единица" также желательно указать, что единица выделена, чтобы знать, над какой из них рисовать "полоску жизни".
Аватара пользователя
Odin_KG
Administrator
Administrator
 
Сообщения: 841
Зарегистрирован: Чт янв 15, 2009 2:57 pm

Re: Передвижение боевых единиц

Сообщение Inex » Вт ноя 20, 2012 1:40 pm

Спасибо что ответили на тему.
Просто в языках низкого уровня чтобы делать одновременно 2 функции требовалось делать 2 потока. Я думал что и тут придется.
Inex
 
Сообщения: 2
Зарегистрирован: Вт ноя 20, 2012 4:43 am

Re: Передвижение боевых единиц

Сообщение Odin_KG » Вт ноя 20, 2012 3:59 pm

Inex писал(а):Спасибо что ответили на тему.

Пожалуйста.

Просто в языках низкого уровня чтобы делать одновременно 2 функции требовалось делать 2 потока. Я думал что и тут придется.

Хм... ну, не знаю, что за язык такой, я всё на C++ делал. На ассемблере тоже никаких потоков не надо, насколько я знаю.
Аватара пользователя
Odin_KG
Administrator
Administrator
 
Сообщения: 841
Зарегистрирован: Чт янв 15, 2009 2:57 pm


Вернуться в Оффтопик

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

cron