???
Математика на уровне МГУ

Показано с 1 по 25 из 789

Тема: Вопросы.

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #6

    Re: Вопросы.

    Цитата Сообщение от -atas- Посмотреть сообщение
    В прошлой миссии с Р1 по 3-4 корабля недотопленных в цепочку собирались. Выкладывал ссылку на галерею багов Р1 в теме про баги.

    Сейчас то же самое получится в новой миссии. Через 30-40 минут новый корабль может врезаться в недотопленный прошлый корабль. Или триггер не сработает пока корабль ко дну не пошел совсем? ИИ капитанов на судах нет, чтобы обходить обломки как танки хотя бы?
    Надо, даже обязательно надо, четко отслеживать момент, что бы не рождалось наземки больше, чем уничтожалось.
    Например, это делается так - миссия-хост загружает (назовем все миссии, отличные от стартовой - слейвами) слейв только один раз. И слейв сам себя контролирует. В случае с колоннами чуть сложнее, в случае с танкерами - слейв самостоятельно отслеживает состояние своего танкера (найти его не проблема, по-умолчанию миссия вызывает методы только для своих объектов), и, по условию, перед тем как загрузить сама себя, принудительно танкер уничтожает. Точно также и танки - перед загрузкой самой себя слейв прибивает все свои объекты. Тогда не будет лишних обломков и битва не будет зарастать мусором.
    Недостаток такого подхода очевиден, слейв ничего не знает о событиях в масштабе битвы. За исключением, конечно, прямого приказа слушать все события. Но все равно он ничего не знает о пользовательских данных хоста (счет и т.д). Это можно обойти чуть более сложным методом:
    1. Именовать объекты в миссии таким способом, что бы хост точно знал, к какой миссии какой объект относится. Перед загрузкой нового слейва убиваем все объекты старые прямо из хоста. Имена объектов можно менять прямо в файле (имена подчиняются определенным правилам правда).
    2. Любой актор в полном имени содержит в начале номер миссии к которой принадлежит. Загружаем слейв, реагируем на OnMissionLoaded - в параметре передается номер свежей миссии. Все, мы можем выборочно убивать объекты по номеру. Далее загрузили следующую, и т.д.
    3. Если не ошибаюсь, можно получить доступ к номеру, который будет присвоен следующей загруженной миссии. Тогда перез загрузкой новой миссии просто запоминаем этот номер. Далее как во втором пункте.

    Идея всего вышеописанного - обязательно убирать за собой перед повторной загрузкой. Тогда и танкеры не будут упираться в своих предшественников.
    Крайний раз редактировалось Small_Bee; 30.08.2011 в 19:45.

Ваши права

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