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

[SFML] Błąd z zapisywaniem pozycji tablicy sprite .

Ostatnio zmodyfikowano 2013-08-05 19:43
Autor Wiadomość
domin568
Temat założony przez niniejszego użytkownika
[SFML] Błąd z zapisywaniem pozycji tablicy sprite .
» 2013-08-04 12:38:37
Witam , tworzę grę w kołko i krzyżyk , lecz od wczoraj mam problem z zapisaniem wszystkich 9 pozycji figur (kołko i krzyżyk) , mówiłem sobie że sam rozwiąże ten problem lecz siedziałem wczoraj prawie cały dzień i nic a nic nie zdziałałem , być może jest to moje niedoświadczenie z tablicami . Tutaj zamieszczam potrzebne kawałki kodu .
main.cpp
C/C++
sf::Event zdarzenie;
Pole pole( okno );
sf::Vector2f pozycjaNaFigure;
sf::Sprite figury[ 9 ];
short kogo_kolej = 1;

short czyKlikniete;
while( okno.isOpen() )
{
   
   
    while( okno.pollEvent( zdarzenie ) )
    {
        sf::Vector2f posMouse( sf::Mouse::getPosition( okno ).x, sf::Mouse::getPosition( okno ).y );
       
        if( zdarzenie.type == sf::Event::Closed )
        {
            okno.close();
            return true;
        }
       
        for( int i = 0; i < 9; i++ )
        {
            if( pole.inPole( posMouse ) == 2 )
            {
                pole.getPositionPole( posMouse, pozycjaNaFigure );
               
               
                pole.ustawFigury( pozycjaNaFigure, figury[ i ], kogo_kolej );
               
               
            }
        }
    }
   
   
    okno.clear();
   
    pole.rysujPole( okno );
    for( int i = 0; i < 9; i++ )
    {
        okno.draw( figury[ i ] );
    }
    okno.display();
}

getPositionPole
C/C++
void 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 ) && isMouseKeyDown() == true )
        {
            pozycja_na_figure = pole[ i ].getPosition();
        }
    }
}

inPole
C/C++
short Pole::inPole( sf::Vector2f pozycja_myszki )
{
    for( int i = 0; i < 9; i++ )
    {
        if( pole[ i ].getGlobalBounds().contains( pozycja_myszki ) == false )
        {
            for( int i = 0; i < 9; i++ )
            {
                setThickness( pole[ i ], 3, sf::Color( 180, 255, 80 ) );
               
            }
        }
       
    }
   
    for( int i = 0; i < 9; i++ )
    {
        if( pole[ i ].getGlobalBounds().contains( pozycja_myszki ) && isMouseKeyDown() == true )
        {
            setThickness( pole[ i ], 3, sf::Color( 60, 100, 255 ) );
           
           
            return 2;
        }
        else if( pole[ i ].getGlobalBounds().contains( pozycja_myszki ) == true )
        {
            setThickness( pole[ i ], 3, sf::Color( 255, 0, 0 ) );
            return 1;
        }
       
       
       
       
    }
}
isMouseKeyDown
C/C++
bool Pole::isMouseKeyDown()
{
    if( sf::Mouse::isButtonPressed( sf::Mouse::Button::Left ) == true )
    {
        return true;
    }
    else return false;
   
}

ustawFigury
C/C++
void Pole::ustawFigury( sf::Vector2f pozycjaNaFigure, sf::Sprite & sprite, short & kogo_kolej )
{
    loadTexture();
   
   
   
    switch( kogo_kolej )
    {
    case 1:
        {
            sprite.setTexture( krzyzyk );
            sprite.setPosition( pozycjaNaFigure );
            kogo_kolej = 2;
            cout << pozycjaNaFigure.x << endl;
            cout << pozycjaNaFigure.y << endl << endl;
            break;
           
        }
       
        //krzyzyk
    case 2:
        {
            sprite.setTexture( kolko );
            sprite.setPosition( pozycjaNaFigure );
            kogo_kolej = 1;
            cout << pozycjaNaFigure.x << endl;
            cout << pozycjaNaFigure.y << endl << endl;
            break;
           
        }
        //kolko
       
    }
   
}
P-89439
pekfos
» 2013-08-04 12:42:19
Jaki problem?
P-89441
domin568
Temat założony przez niniejszego użytkownika
» 2013-08-04 12:44:39
Gdy kliknę na jedno pole , wyświetla mi krzyżyk , klikne na drugie , kasuje mi się pierwsza pozycja . I tak non stop
P-89444
pekfos
» 2013-08-04 12:52:59
C/C++
for( int i = 0; i < 9; i++ )
{
    if( pole.inPole( posMouse ) == 2 )
    {
        pole.getPositionPole( posMouse, pozycjaNaFigure );
       
       
        pole.ustawFigury( pozycjaNaFigure, figury[ i ], kogo_kolej );
       
       
    }
}
Wytłumacz sens tej pętli.
P-89446
domin568
Temat założony przez niniejszego użytkownika
» 2013-08-04 13:06:52
No jeżeli myszka jest kliknięta , i znajduję się w jakimś polu to zwróc pozycje tego pola i ustaw tą pozycje na sprite i tak 9 razy .
P-89452
pekfos
» 2013-08-04 13:16:22
getPositionPole() nie zawsze modyfikuje pozycjaNaFigure.
P-89454
domin568
Temat założony przez niniejszego użytkownika
» 2013-08-04 17:48:48
W jakich sytuacjach nie modyfikuje ? Pętla ma 9 obiegow za każdym razem sprawdza warunek , a jeżeli jest prawdziwy to zwraca pozycje sprawdzonej tablicy [obieg petli]  pefkos mógłbyś sprecyzować ?? Bardzo by mi to pomogło :)
P-89488
pekfos
» 2013-08-04 18:20:29
Nie modyfikuje, gdy żaden warunek się nie spełni i gdy ustawiona wartość jest identyczna z poprzednią. Dlaczego całość wywołujesz 9 razy? Myszka jak była kliknieta, tak jest, a getPositionPole() da te same rezultaty. Popatrz teraz, co robi metoda ustawFigury(), gdy zmieniają się tylko dwa ostatnie argumenty.
P-89490
« 1 » 2 3
  Strona 1 z 3 Następna strona