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 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 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 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 bool Pole::isMouseKeyDown() { if( sf::Mouse::isButtonPressed( sf::Mouse::Button::Left ) == true ) { return true; } else return false; }
ustawFigury 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; } case 2: { sprite.setTexture( kolko ); sprite.setPosition( pozycjaNaFigure ); kogo_kolej = 1; cout << pozycjaNaFigure.x << endl; cout << pozycjaNaFigure.y << endl << endl; break; } } }
|
|
pekfos |
» 2013-08-04 12:42:19 Jaki problem? |
|
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 |
|
pekfos |
» 2013-08-04 12:52:59 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. |
|
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 . |
|
pekfos |
» 2013-08-04 13:16:22 getPositionPole() nie zawsze modyfikuje pozycjaNaFigure. |
|
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 :) |
|
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. |
|
« 1 » 2 3 |