• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Nieprawidłowe działanie kodu. SFML, próba stworzenia menu na szybko.

Object Storage Arubacloud
0 głosów
532 wizyt
pytanie zadane 21 sierpnia 2017 w C i C++ przez TomaszA2 Obywatel (1,720 p.)

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)

komentarz 21 sierpnia 2017 przez 10kw10 Pasjonat (22,880 p.)
t1 = timer.getElapsedTime();

Ta linijka powinna byc w main() w petli glownej.

Uzycie Sleep() tez mi sie nie podoba. Zmienne globalne ? ble. Program nie wiem jak dziala bo nie chce mi sie robic tekstur.

komentarz 21 sierpnia 2017 przez TomaszA2 Obywatel (1,720 p.)
Nazwa sleep dla funkcji została bo poprzednio wstrzymywała cały program co, jak się później okazało powodowało crashe.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 96 wizyt
pytanie zadane 24 marca 2020 w C i C++ przez Liryk Użytkownik (650 p.)
0 głosów
1 odpowiedź 211 wizyt
+5 głosów
3 odpowiedzi 161 wizyt
pytanie zadane 8 kwietnia 2015 w SQL, bazy danych przez MatexQ Bywalec (2,260 p.)

92,624 zapytań

141,482 odpowiedzi

319,822 komentarzy

62,005 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...