Привязка ко времени в sfml

270
22 июля 2022, 06:20

Есть простая программа, которая должна реагировать на клавишу, и задавать шару ускорение, когда клавиша отпускаеться, шар движется с прежней скоростью. Но есть проблема, когда не нажата ни одна клавиша, то шар двигается намного быстрее, чем если бы зажал правую стрелку, даже при одинаковых скоростях. Полагаю, что эта разница изза того, при нажатии на стрелку выполняеться намного больше операций, чем если ничего не нажато. фпс лимит задан, не помогает. В консоли сделал вывод скоростей, скорости одинаковые. Для вывода шара использую SFML. Как исправить данную проблему ? Даже сообщения в консоли выводяться при нажатии клавиши намного медленее, чем когда нет нажатия

#include <SFML/Graphics.hpp>
#include <iostream>
#include <iomanip>
int main()
{
    sf::RenderWindow window;
    window.create(sf::VideoMode(1280, 720), "Vikno");   
    window.setFramerateLimit(60);
    long double x=0, BEG;
    double currentX, OLDcurrentX=0;
    std::cin >> currentX;
    sf::CircleShape kulka1(20, 30);
    kulka1.setFillColor(sf::Color::Blue);
    kulka1.setPosition(currentX*10, 580);
    long double V = 0, a=2, t=0, TIME=0;
    long double i=0, j=0;
    long double global_V = 0, local_V=0;
    long double xOLD = 0;
    double oldTIME=0;
    sf::Clock clock;
    sf::Clock clock2;
    bool restart=1, otz =0, robota=0, global_Vreset = 0, global_Vneed=0, pressedright=0, pressedleft = 0, currentXcalc=0;
    while (window.isOpen())
    {
        float time = clock.getElapsedTime().asSeconds();
        clock.restart();
        t = time;
        sf::Event event;
        window.pollEvent(event);
    
        {
            if (event.type == sf::Event::Closed) window.close();                      
            if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape)) window.close();     // закриття вікна через escape
            TIME = 0;
            if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
            {
                currentXcalc = 1;
                if (otz == 1) clock2.restart();
                long double TIME = clock2.getElapsedTime().asSeconds();
               
                if (global_Vneed == 1) local_V = global_V, global_Vneed=0;
                
                 V = local_V + a * TIME;
                x = V * TIME / 2 + currentX;   
                kulka1.setPosition(x * 10, 580);
                std::cout << "Speed: " << V << "\n";
                otz = 0;
                pressedright = 1;
            }
            else
            {
                otz = 1;
                global_Vneed = 1;
                pressedright = 0;
                if (currentXcalc)
                {
                    currentX = x;                
                    currentXcalc = 0;
                }
                oldTIME = TIME;
                
            }
            global_V = V;
            {
                
            }
            robota = 0;
            if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
            {
        
                pressedleft = 1;
            }
            else pressedleft = 0;
    
            double x1;
            if (pressedleft == 0 and pressedright == 0)
            {
                x1 = global_V * t;
                kulka1.move(x1 * 10, 0);
                currentX += x1;
                std::cout << "Bez nazhatija: " << global_V << "\n";
            }
        }
        
        window.clear(sf::Color::Black);
        window.draw(kulka1);
        window.display();
    }
    return 0;
}
READ ALSO
Подчёркиваются русские слова в Visual Studio

Подчёркиваются русские слова в Visual Studio

Всем доброго времени сутокВ среде разработке Visual Studio подчёркиваются русские слова

319
c++ Перебор чисел с плавающей точкой

c++ Перебор чисел с плавающей точкой

Нужно узнать какие числа составляет число N из чисел a и b

279
Программа не работает с кириллицей С++

Программа не работает с кириллицей С++

Делаю курсовой проект по теме поиска подстроки в строке с помощью алгоритма Бойера-Мура(Главная строка должна быть больше 255 символов)

194
Как настроить определение языка сайта?

Как настроить определение языка сайта?

Я нашла вот такой кодНо не понимаю, как реализовать для моего варианта

288