SFML własna funkcja click błąd z zwracaniem wartosci.
Ostatnio zmodyfikowano 2017-08-19 15:20
Wuwus1 Temat założony przez niniejszego użytkownika |
SFML własna funkcja click błąd z zwracaniem wartosci. » 2017-08-19 15:00:08 Niestety w sfml nie ma funkcji która sprawdza czy przycisk został kliknięty i wywołuje daną funkcję tylko raz. Napisałem więc klasę gracz, a w niej funkcje która sprawdza jaki atak ma zostać użyty. Z tą funkcją działa druga prywatna "char Clicked()" zwraca ona znak przycisku który został kliknięty i tu pojawiają się schody. Funkcja dla przycisku, który jest pierwszy w funkcji CheckAttack() działa poprawnie, a dla reszty nie. Zrobiłem testy i funkcja Clicked zwraca odpowiednią wartość ale funkcja CheckAttack() dla tej wartości nie wywołuje komendy. Funkcja CheckAttack() [Sprawdza jaki atak użyć] void Player::CheckAttack() { if( Clicked() == 'W' ) { std::cout << "W\n"; } if( Clicked() == 'E' ) { std::cout << "e\n"; } if( Clicked() == 'R' ) { std::cout << "r\n"; } }
Funkcja Clicked() [Zwraca znak przycisku który został wciśnięty w przeciwnym wypadku zwraca X] char Player::Clicked() { if( sf::Keyboard::isKeyPressed( sf::Keyboard::W ) ) { if( sf::Keyboard::isKeyPressed( sf::Keyboard::W ) && Click == false ) { Click = true; return 'W'; } else if( sf::Keyboard::isKeyPressed( sf::Keyboard::W ) && Click == true ) { return 'X'; } } else if( sf::Keyboard::isKeyPressed( sf::Keyboard::E ) ) { if( sf::Keyboard::isKeyPressed( sf::Keyboard::E ) && Click == false ) { Click = true; std::cout << "Test E\n"; return 'E'; } else if( sf::Keyboard::isKeyPressed( sf::Keyboard::E ) && Click == true ) { return 'X'; } } else if( sf::Keyboard::isKeyPressed( sf::Keyboard::R ) ) { if( sf::Keyboard::isKeyPressed( sf::Keyboard::R ) && Click == false ) { Click = true; std::cout << "Test R\n"; return 'R'; } else if( sf::Keyboard::isKeyPressed( sf::Keyboard::R ) && Click == true ) { return 'X'; } } else { Click = false; return 'X'; } }
|
|
Wuwus1 Temat założony przez niniejszego użytkownika |
Naprawione » 2017-08-19 15:20:44 Wystarczyło, że dodałem do funkcji CheckAttack() char temp i do niego przypisywałem wynik funkcji Clicked(), a potem porównywałem go z if'ami. void Player::CheckAttack() { char temp = Clicked(); if( temp == 'W' ) { std::cout << "W\n"; } if( temp == 'E' ) { std::cout << "e\n"; } if( temp == 'R' ) { std::cout << "r\n"; } }
|
|
« 1 » |