Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

SFML własna funkcja click błąd z zwracaniem wartosci.

Ostatnio zmodyfikowano 2017-08-19 15:20
Autor Wiadomość
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ć]
C/C++
void Player::CheckAttack()
{
    if( Clicked() == 'W' ) //Atak szybki
    {
        std::cout << "W\n";
    }
   
    if( Clicked() == 'E' ) //Atak wolny
    {
        std::cout << "e\n";
    }
   
    if( Clicked() == 'R' ) //Blok
    {
        std::cout << "r\n";
    }
   
}

Funkcja Clicked() [Zwraca znak przycisku który został wciśnięty w przeciwnym wypadku zwraca X]

C/C++
char Player::Clicked()
{
    if( sf::Keyboard::isKeyPressed( sf::Keyboard::W ) ) //Klinkięto 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 ) ) //Klinkięto 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 ) ) //Klinkięto 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';
    }
}
 
P-164104
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.
C/C++
void Player::CheckAttack()
{
    char temp = Clicked();
    if( temp == 'W' ) //Atak szybki
    {
        std::cout << "W\n";
    }
   
    if( temp == 'E' ) //Atak wolny
    {
        std::cout << "e\n";
    }
   
    if( temp == 'R' ) //Blok
    {
        std::cout << "r\n";
    }
}
P-164105
« 1 »
  Strona 1 z 1