Najpierw kod:
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <SFML/System.hpp>
#include <cmath>
#include <windows.h>
#include <stdio.h>
#include <cstdarg>
#include <stdlib.h>
#include <cstdlib>
#include <math.h>
#include <time.h>
#include <iostream>
#include <fstream>
#include <conio.h>
#include <string>
#include <sstream>
#include <iostream>
sf::Clock timer;
sf::Time t1 = timer.getElapsedTime();
sf::Time t2;
bool end_of_timer_1=true;
sf::Vector2i arrow2;
int licznik = 0;
int sleep(int time_of)
{
t2=timer.getElapsedTime();
if( t2.asMilliseconds() >= t1.asMilliseconds() + time_of )
{
timer.restart();
t1 = timer.getElapsedTime();
end_of_timer_1 = true;
}
return 0;
}
int menu()
{
if(sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) && licznik >= 1 && end_of_timer_1==true)
{
licznik-=1;
end_of_timer_1=false;
}
if(sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) && licznik <= 3 && end_of_timer_1==true)
{
licznik+=1;
end_of_timer_1=false;
}
arrow2.y=23+(111*licznik);
return 0;
}
int main()
{
int obrazY=0;
int obrazX=0;
sf::RenderWindow Okno(sf::VideoMode( 800, 600, 32 ) ,"Test");
sf::Texture test;
sf::Texture test2;
sf::Texture test3;
test.loadFromFile("tekstury/menu.PNG");
sf::Sprite tlo;
tlo.setTexture(test);
test2.loadFromFile("tekstury/arrow.PNG");
sf::Sprite arrow;
arrow.setTexture(test2);
test3.loadFromFile("tekstury/test3.PNG");
sf::Sprite obraz3;
obraz3.setTexture(test3);
Okno.setFramerateLimit(70);
while(Okno.isOpen())
{
//licznikwhite+=1;
//licznikblack+=1;
sf::Event zdarzenie;
while( Okno.pollEvent( zdarzenie ) )
{
if( zdarzenie.type == sf::Event::Closed )
{
Okno.close();
}
}
menu();
if(end_of_timer_1==false)sleep(1000);
tlo.setPosition(0, 0);
arrow.setPosition(arrow2.x, arrow2.y);
obraz3.setPosition(315, 315);
Okno.clear(sf::Color(0,0,0, 0));
Okno.draw(tlo);
Okno.draw(arrow);
Okno.draw(obraz3);
Okno.display();
}
return 0;
}
Proszę nie zwracać uwagi na część dotyczącą wyświetlania tego. (ponoć jakoś źle kod ludziom wygląda)
Problemem jest to że wszystko działa dobrze ale jeśli zegar jakiś czas temu odliczył swój czas to kolejne wciśnięcie klawisza czasem (dość często) przeskakuje o 2 w dół lub w górę. Jak na to patrzę to wygląda dobrze, nie wiem w czym problem. (czas ustawiłem na 1 sekundę w celach diagnostycznych)