Очень быстрое движение фигуры sfml

73
19 января 2022, 04:00

У меня есть фигура(квадрат для примера):

VertexArray quad(LinesStrip, 5);
 quad[0].position = Vector2f(0, 0);
 quad[1].position = Vector2f(25, 0);
 quad[2].position = Vector2f(25, 25);
 quad[3].position = Vector2f(0, 25);
 quad[4].position = quad[0].position;

Я создал класс figure и объявил там публичный метод:

    VertexArray drawQuad() {
     VertexArray quad(LinesStrip, 5);
     quad[0].position = Vector2f(0, 0);
     quad[1].position = Vector2f(25, 0);
     quad[2].position = Vector2f(25, 25);
     quad[3].position = Vector2f(0, 25);
     quad[4].position = quad[0].position;
     return quad;
}

В приватном поле у меня есть переменные:

float x = 0, y = 0;
float moveSpeed = 5;

Еще у меня есть метод для перемещения фигуры по нажатию клавиш:

    void move(Event &event) {
    if (event.type == sf::Event::KeyPressed)
        {
            if (event.key.code == sf::Keyboard::Left)
                x -= moveSpeed;
            else if (event.key.code == sf::Keyboard::Right)
                x += moveSpeed;
            else if (event.key.code == sf::Keyboard::Up)
                y -= moveSpeed;
            else if (event.key.code == sf::Keyboard::Down)
                y += moveSpeed;
        }
}

И собственно метод для вывода на экран:

    void drawQuadWin(RenderWindow &window) {
    Transformable trans;
    trans.setPosition(500, 500);
    trans.move(x,y);
    window.draw(drawQuad(), trans.getTransform());
}

Суть проблемы: когда я вызываю 2 метода из класса для отрисовки и движения фигуры, она двигается очень быстро, то-есть при нажатии клавиши вверх, фигура вылетает за границы экрана. Аналогично и с другими направлениями. Но если я не меняя ничего проверну тоже самое в main. В цикле while(window.isOpen()) нарисую выведу и буду двигать фигуру, все будет работать идеально.Как исправить?

Answer 1

Проблема, скорее всего, не в приведённом коде, а в общем цикле отрисовки -- fps слишком большой. Прочитайте классическую статью и попробуйте использовать циклы оттуда https://gafferongames.com/post/fix_your_timestep/

READ ALSO
Найти количество символов в слове

Найти количество символов в слове

Есть массив на 80В каждом элементе массива находится слово

75
Как размещается std::string в памяти

Как размещается std::string в памяти

Разбираясь с устройством ОЗУ пришел к вопросу о реализации string'aПо идее это уже просто стандартная штука, но не смог найти нужной инфы

82
Глобальный указатель на объект

Глобальный указатель на объект

Какие могут быть подводные камни если сделать глобальный указатель на объект по типу Sensormanager *sensormanager и передать его во второй потокОпределять...

105
В React input изменяется jQuery

В React input изменяется jQuery

Два скрипта взаимодействуют друг с другом: один написан на React, другой на jQueryВ React-компоненте есть textarea и есть событие onChange, которое изменяет...

95