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

[SFML] Problem z wyodrębnieniem pola .

Ostatnio zmodyfikowano 2013-08-08 23:22
Autor Wiadomość
domin568
Temat założony przez niniejszego użytkownika
[SFML] Problem z wyodrębnieniem pola .
» 2013-08-06 22:12:33
Witam , mój problem niby nie przeszkadza w działaniu mojej aplikacji , jednak chciałem to zrobić abym mógł zrobić specjalną obwolutę pola które zostało już klikniętę . Jednak kiedy wywołuje metodę sprawdzającą to sprawdza mi ona również już to co przed chwilą kliknąłem . Tutaj kod potrzebny :
isUsed
C/C++
bool Pole::isUsed( sf::Vector2f pozycja_pola, sf::Sprite * sprite, int i, int & f )
{
   
    f++;
    cout << "f = " << f << endl;
    for( int j = 0; j < f && j < 9; j++ )
    {
        cout << pozycja_pola.x << " pozycja pola.x " << endl;
        cout << pozycja_pola.y << " pozycja pola.y " << endl;
        cout << "sprite[" << j << "] x" << sprite[ j ].getPosition().x << endl;
        cout << "sprite[" << j << "] y" << sprite[ j ].getPosition().y << endl;
       
       
       
        if( pozycja_pola == sprite[ j ].getPosition() )
        {
           
            cout << "zwracam true " << endl; // to zawsze się wykona bo i tak go znajdzie ;p
            return true;
           
        }
       
       
    }
   
    cout << "zwracam false " << endl;
    return false; // jeżeli nie jest równe , wykonuje się k
   
}

główna
C/C++
int i = - 1;
int f = 0;
int k = 0;


while( okno.pollEvent( zdarzenie ) )
{
   
    pole.getPosMouse( okno );
   
    if( zdarzenie.type == sf::Event::Closed )
    {
        okno.close();
        return true;
    }
   
   
    if( pole.inPole( pole.getPosMouse( okno ) ) == 2 )
    {
       
       
        if( pole.isUsed( pole.getPositionPole( pole.getPosMouse( okno ), pozycjaNaFigure ), figury, i, f ) == false )
        {
           
            ++i;
            pole.getPositionPole( pole.getPosMouse( okno ), pozycjaNaFigure );
            pole.ustawFigury( pozycjaNaFigure, figury, kogo_kolej, i );
        }
        if( pole.isUsed( pole.getPositionPole( pole.getPosMouse( okno ), pozycjaNaFigure ), figury, i, f ) == true ) // to wykona się zawsze
        {
            cout << "iiiiii" << i << endl;
            cout << " aa " << endl; // czy sie wywoluje
        }
       
       
    }
   
}

getPositionPole
C/C++
sf::Vector2f Pole::getPositionPole( sf::Vector2f pozycja_myszki, sf::Vector2f & pozycja_na_figure )
{
    for( int i = 0; i < 9; i++ )
    {
        if( pole[ i ].getGlobalBounds().contains( pozycja_myszki ) )
        {
            pozycja_na_figure = pole[ i ].getPosition();
            return pozycja_na_figure;
        }
    }
}
P-89646
bbcodepl
» 2013-08-07 07:03:29
Z tego co widzę, ale mogę się mylić brakuje przed tym  chyba else:
C/C++
cout << "zwracam false " << endl;
return false; // jeżeli nie jest równe , wykonuje się k
P-89652
hincu
» 2013-08-07 10:13:06
w petli glownej sprawdz raz... i uzyj if else a nie if if, swoja droga ten kod jest cholernie chaotycznie napisany i nieczytelny, ledwo co kminie o co w nim chodzi..., nastepnym razem nie cuduj za bardzo bo nie wychodzi tobie myslenie xD
P-89657
domin568
Temat założony przez niniejszego użytkownika
» 2013-08-07 12:14:01
@bbcodepl jeżeli użyłbym tam else to by mi wywaliło błąd , no bo if jest w pętli a tak jak już wyjdzie z pętli to zwraca false . @hincu wiem że w głównej mógłbym dać tam else , w głównej sprawdzam wszystko przecież tylko raz , więc o co ci chodzi :) ? chyba zę chodzi ci o isUsed no to tam sprawdzam wszystkie elementy tablicy sprite ( tylko chce żeby nie zwracało true gdy dopiero co kliknę w pole )
Edycja :
hincu jednak miałeś racje , zupełnie nie pomyślałem że jeżeli będę wywoływał tą metode po raz 2 to również będzie sprawdzać , dałem
else
 zamiast
if( pole.isUsed( pole.getPositionPole( pole.getPosMouse( okno ), pozycjaNaFigure ), figury, i, f ) == true )
P-89668
hincu
» 2013-08-08 23:22:20
skoro problem rozwiazany to zamknij temat, w koncu po to admini dali zwyklym usera taka flage...
P-89753
« 1 »
  Strona 1 z 1