Показать сообщение отдельно
  #13  
Старый 15.01.2015, 22:51
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
У меня дурацкий вопрос. Нигде не могу найти информацию про одновременную работу нескольких объектов, например в стратегиях. Каждый танк это отдельный поток? Есть свой класс который отвечает за столкновение объектов (например не больше одного объекта в клетке)?
И может вы подскажите какие-нибудь статьи о принципах построения таких вот игрушек?
В основном интересует как раз несколько юнитов на карте.
Много потоков создадут много проблем, потому что потребуют синхронизации. Самый простой (и, думаю, самый применяемый метод) - сделать список динамических объектов, и каждую итерацию главного цикла игры проходить по списку и обрабатывать все действия.
Есть 2 турели. Обе в массиве. Обрабатываться они будут по очереди. Каждая будет анализировать состояние окружающей среды на предмет наличия врагов в зоне досягаемости, поворачиваться и стрелять. Разумеется, важно не делать все действия сразу, а разбить на атомарные. Грубо говоря, поворот на N градусов будет обработан за N проходов цикла, и в каждый проход будет поворот на 1 градус. Выстрел - тоже не мгновенная смерть: нужно создать "пулю" и добавить ее в список обработки. Пуля в свою очередь будет перемещаться на X метров за каждый проход. Если при обработке пули выяснилось, что пуля столкнулась с объектом - наносим повреждения и удаляем пулю.
Разбиение же на много потоков нагрузит систему и при этом не принесет никаких реальных отличий: если у процессора меньше ядер, чем одновременно запущенных потоков, то все равно они будут обрабатываться по очереди.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием