problem z obsługą zdarzeń - SFML

0

Witam, oto fragment mojej funkcji do obsługi menu:

 
while( window.GetEvent( temp_event ) || !exit )			// pobieranie zdarzeń
        {
            if( temp_event.Type == sf::Event::Closed )		// sprawdzanie czy nie naciśnieto "krzyżyka zamknij:
			{
				exit=true;
			}

			if( temp_input.IsKeyDown(sf::Key::Up) && current_position>1 && !key_pressed)			// sprawdzanie czy nie naciśnieto "UP":
			{	
				key_pressed=true;
				up();	
				print(window,settings_ob);				
			}

			if( temp_input.IsKeyDown(sf::Key::Down) && current_position<4 && !key_pressed )		// sprawdzanie czy nie naciśnieto "DOWN":
			{	
				key_pressed=true;
				down();	
				print(window,settings_ob);
			}	

			if (temp_event.KeyReleased)
				key_pressed=false;

		}

Problem polega na tym, że jak wcisne np. strzałkę w doł, ono Od razu przeskakuje do ostatniej pozycji, chciałem zablokować program tak, że przejść do góry lub nadół można tylko wtedy, że tak powiem, jeżeli klawisz został dopiero wciśnięty, a jeżeli trzymam np. cały czas daną strzałkę w dół, to i tak tylko skoczy o jedną pozycję. Mogłby ktoś poradzić jak zastosować takie coś? Z góry dzięki.

0

Przykład z oficjalnego tutoriala:

while (App.IsOpened())
{
    sf::Event Event;
    while (App.GetEvent(Event))
    {
        // Window closed
        if (Event.Type == sf::Event::Closed)
            App.Close();

        // Escape key pressed
        if ((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::Escape))
            App.Close();
    }
}
0

słuchajcie, no nie wiem ale cały czas w menu skacze mi do ostatniej (4) pozycji. Irytujace to jest, a nie mogę za nic znaleźć gdzie leży błąd:

 while( window.GetEvent( temp_event ) || !exit )			// pobieranie zdarzeń
        {
            if( temp_event.Type == sf::Event::Closed )		// sprawdzanie czy nie naciśnieto "krzyżyka zamknij:
			{
				exit=true;
			}

			if( temp_event.Type == sf::Event::KeyPressed && temp_event.Key.Code== sf::Key::Up && current_position > 1)			// sprawdzanie czy nie naciśnieto "UP":
			{	
				cout << "UP" << endl;
				up();	
				print(window,settings_ob);				
			}

			if( temp_event.Type == sf::Event::KeyPressed &&  temp_event.Key.Code== sf::Key::Down && current_position < 4 )		// sprawdzanie czy nie naciśnieto "DOWN":
			{	
				cout << "DOWN" << endl;
				down();	
				print(window,settings_ob);
			}	
		}
0

Słuchajcie doszedłem do dziwnej rzeczy, te jednorazowe działanie klawiszy działa dla normalnych, np "A" itp, ale dla strzałek już nie:(

0

wydaje mi sie ze obsluga zdarzen qlawiatury jest ograniczona a rozwinieciem jest stworzenie wskaznika na input co wyglada:

const sf::Input& Input = App.GetInput();

i dalej porownywaniu w glownej petli programu z odczytem wejscia z Input np.

if ( Input.IsKeyDown(sf::Up) ) ...

sam sie dopiero ucze tej biblioteki
jezeli cos tworzysz i wykorzystujesz ta biblioteke zapraszam do tematu:

http://4programmers.net/Forum/C_i_C++/196164-sfml_in_c++
ChS

1 użytkowników online, w tym zalogowanych: 0, gości: 1