Есть простая программа, которая должна реагировать на клавишу, и задавать шару ускорение, когда клавиша отпускаеться, шар движется с прежней скоростью. Но есть проблема, когда не нажата ни одна клавиша, то шар двигается намного быстрее, чем если бы зажал правую стрелку, даже при одинаковых скоростях. Полагаю, что эта разница изза того, при нажатии на стрелку выполняеться намного больше операций, чем если ничего не нажато. фпс лимит задан, не помогает. В консоли сделал вывод скоростей, скорости одинаковые. Для вывода шара использую 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;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Всем доброго времени сутокВ среде разработке Visual Studio подчёркиваются русские слова
Делаю курсовой проект по теме поиска подстроки в строке с помощью алгоритма Бойера-Мура(Главная строка должна быть больше 255 символов)
Я нашла вот такой кодНо не понимаю, как реализовать для моего варианта