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

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

#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) это сильно сможет облегчить тебе жизнь в дальнейшем програмировании игры (В частности при помощи этого класса можно спокойно отрисовывать спрайты слоями, т.е. вначале то что должно быть на заднем плане, дальше на главном а после то что должно быть поверх главного плана)