Если загружать уровень в игру, то он задержит Update и обновления не будет, пока он не загрузится. Пока не будет обновления, индикатор загрузки не отобразит текущий процент загрузки. Когда загрузка закончится, начнётся новый цикл Update, но загрузка уже будет 100%, а значит пользователь не увидит работу индикатора. А как правильно организуют такие индикаторы?
Если совсем уж по-простому: допустим есть 1-ландшафт, 2-постройки, 3-враги, 4-логика, 5-физика. Итого 5 элементов для загрузки. Вот и грузим их, после загрузки каждого элемента сигналим о 20% загрузке (100/5), при этом индикатор интерполируем до следующих 20%.
ZeLDER написал:
я в другом потоке отображал экран загрузки и посылал туда "стадии загрузки"
Через переменную в статическом классе? Через события? Обычно с передачей данных в другой поток возникают трудности. А как у Вас с этим?
Примерно делал так: в игре создавал класс Screen который отвечает за текущий "экран" в котором свой Load, Update и Draw. Вот в этом Screen, который непосредственно для уровня игры (с экраном загрузки), при его загрузке (метод Load) создавал поток:
GeSHi: C#
ThreadPool.QueueUserWorkItem(new WaitCallback(LoadContentDo), new ManualResetEvent(false));
Добавлено за 0.004 секунд, используя GeSHi 1.0.8.2
А в этом самом методе LoadContentDo грузил класс с логикой уровня и все объекты для уровня. Попутно в своем потоке (внутри класса Screen, хоть статикой, хоть как) отображая стадии (как описал beaver).
По завершении загрузки (метода LoadContentDo) переключал указатель на функции Update и Draw на те, которые в классе логики игры.
Присоединяюсь к данному вопросу)
Я думал реализовать пошагово, как впринципе многие и делают. После каждой загрузки какого нибудь файла или действия обновлять информацию о состоянии загрузки в целом. Но тогда возникнут подтормаживания в процессе
На самом деле это супер секретные алгоритмы и тебе никто не скажет как это сделать, тебе скажут что "это можно сделать", как мне уже сказали "за тебя никто писать код не будет"
Алгоритм выше описал, чем не подходит? Конечно никто код писать не будет, ибо никто не видит твое приложение и понятия не имеем как внедрить в конкретно твой проект.
Совершенно простой вопрос, с первым же правильным ответом, раздули почти на две страницы?
Чем не нравится ответ Zelder'а? Он самый простой и самый верный и оптимальный!
P.S. У меня сложилось впечатление, что народ не умеет и не хочет разбираться с потоками. "Уж лучше сколочу автомобиль из досок, и буду двигать его упираясь в землю ногами, чем идти учиться"
Перейти на форум:
Авторизация
Вы не зарегистрированы? Нажмите здесь для регистрации.