при перетаскивании окна пропадают монстры и игрок

SFML и C++ Уроки \ Разработка игр Форумы SFML Graphics при перетаскивании окна пропадают монстры и игрок

В этой теме 4 ответа, 2 участника, последнее обновление  Serob 6 года/лет, 10 мес. назад.

Просмотр 5 сообщений - с 1 по 5 (из 5 всего)
  • Автор
    Сообщения
  • #4659

    Serob
    Участник
    Сообщений:25

    Зарегистрирован:
    14.05.2017

    Репутация:1

    при перетаскивании окна (за полоску где крестик, свернуть развернуть окно)  пропадают монстры и игрок. Пропадание рандомное иногда (чаще) только монстры, иногда пропадают все монстры и игрок. текстура на месте без изменений.

    Что за глюк и как его победить?

    ОС WIN 10, VC professional 2017

     

    #4660

    Serob
    Участник
    Сообщений:25

    Зарегистрирован:
    14.05.2017

    Репутация:1

    дополнение к вышесказанному. пропадают “движущиеся” объекты которые “видимы” в окне. монстры за пределами “окна” не исчезают.

    #4661
    +1

    KindRedSand
    Участник
    Сообщений:82

    Зарегистрирован:
    05.04.2017

    Репутация:30

    Для избегания таких вещей делают перемещение обьектов привязанно не ко времени, а к некому игровому тику который срабатывает каждый интервал времени.
    Для привязки всего к тику придётся переписывать половину кода. Для себя я набросал два класса которые отвечают за подобную механику обновления обьектов. Можешь спокойно использовать и модифицировать их как хочешь. Учти что:
    1. Твой код должен содержатся в классе – наследнике от State и в int main() должна быть обьявлена конструкция:
    IApp app(window);
    app.run(new ИмяНовогоКлассаState(&window))
    2. onHandle(sf::Event event) будет вызыватся на каждый ивент содержащийся в пуле окна
    3. onUpdate(sf::Time delta) и onDraw(sf::RenderWindow window) не всегда будут вызыватся одновременно за один цикл (если отрисовка займёт слишком много времени следующее обновление будет вызвано столько раз, сколько излишнего времени заняла отрисовка и наоборот, если отрисовка проходит быстрее чем временной шаг то будет снова вызыватся отрисовка пока не пройдт времени больше чем временной шаг).
    Ну, думаю и ежу понятно что код инициализации должен быть в конструкторе класса, логика в onUpdate а отрисовка в onDraw. Если нужно перехватить вводимый игроком текст или ещё что-то связаное с sf::Event – ловим в onHandle.
    Узлы, добавленые в addNode(Node * node), будут иметь приоритет заданый переменной Z и всегда приоритет ниже Parent(Т.е. класса в котором он был добавлен)
    Ну и собственно классы(Разбиты на хидеры и .cpp, как и положено). Кстати, если сможешь понять как можно использовать класс-узел (Node) это сильно сможет облегчить тебе жизнь в дальнейшем програмировании игры (В частности при помощи этого класса можно спокойно отрисовывать спрайты слоями, т.е. вначале то что должно быть на заднем плане, дальше на главном а после то что должно быть поверх главного плана)

     

    #4662
    +1

    KindRedSand
    Участник
    Сообщений:82

    Зарегистрирован:
    05.04.2017

    Репутация:30

    А, и возможно я мог слишком неявно указать в чём проблема: Когда ты перетаскиваешь окно и игра доходит до секции отрисовки отрисовка приостанавливается до момента пока ты не отпустиш окно, и как только ты попадаешь в секцию где ты перемещаешь обьекты ты умножаешь перемещение на пройденое время ща цикл. Посколько цикл был приостановлен, но время продолжало идти перемещение обьектов оказывалось настолько большим что обьекты попросту повылетали за границы экрана.

    #4665

    Serob
    Участник
    Сообщений:25

    Зарегистрирован:
    14.05.2017

    Репутация:1

    спасибо за развернутый ответ.

    решая одну проблемы мы создаём себе две и так далее…

Просмотр 5 сообщений - с 1 по 5 (из 5 всего)

Для ответа в этой теме необходимо авторизоваться.