Elderion Temat założony przez niniejszego użytkownika |
[SFML 2.0] Przemieszczanie obiektu za pomocą klawiszy » 2013-05-04 13:35:17 Czemu jak klikam D/A to sprite się nie porusza? #include <SFML/Graphics.hpp>
int main() { sf::RenderWindow oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "LOL" ); sf::Texture tekstura; tekstura.loadFromFile( "rysunek.png" ); sf::Sprite obrazek; obrazek.setTexture( tekstura ); if( sf::Keyboard::isKeyPressed( sf::Keyboard::D ) ) { obrazek.move( 400, 300 ); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::A ) ) { obrazek.move( 200, 300 ); } while( oknoAplikacji.isOpen() ) { sf::Event zdarzenie; while( oknoAplikacji.pollEvent( zdarzenie ) ) { if( zdarzenie.type == sf::Event::Closed ) oknoAplikacji.close(); if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape ) oknoAplikacji.close(); } oknoAplikacji.clear( sf::Color::Black ); obrazek.setPosition( 300, 300 ); oknoAplikacji.draw( obrazek ); oknoAplikacji.display(); } return 0; }
|
|
Berux |
» 2013-05-04 13:38:23 Oba if'y odpowiadające za poruszanie umieść w pętli przeznaczonej dla zdarzeń. |
|
Elderion Temat założony przez niniejszego użytkownika |
... » 2013-05-04 13:43:38 Tutaj nie działa. while( oknoAplikacji.isOpen() ) { if( sf::Keyboard::isKeyPressed( sf::Keyboard::D ) ) { obrazek.move( 400, 300 ); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::A ) ) { obrazek.move( 200, 300 ); } sf::Event zdarzenie; while( oknoAplikacji.pollEvent( zdarzenie ) ) { if( zdarzenie.type == sf::Event::Closed ) oknoAplikacji.close(); if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape ) oknoAplikacji.close(); }
Tutaj też nie: while( oknoAplikacji.isOpen() ) { sf::Event zdarzenie; while( oknoAplikacji.pollEvent( zdarzenie ) ) { if( zdarzenie.type == sf::Event::Closed ) oknoAplikacji.close(); if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape ) oknoAplikacji.close(); if( sf::Keyboard::isKeyPressed( sf::Keyboard::D ) ) { obrazek.move( 400, 300 ); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::A ) ) { obrazek.move( 200, 300 ); } }
ps. Nie wiem czy to ta pętla :P |
|
RazzorFlame |
» 2013-05-04 14:11:27 Taa twoja logika jest wręcz onieśmielająca: obrazek.setPosition( 300, 300 );
Przesuwanie powinno być w 1 pętli, event tworzony przed pętlami a to całkowicie wywal. Jak ty chcesz przesuwać sprajta jak cały czas ustawiasz jego pozycje na stałą? Edit: A wartości w funkcji move są troche (w kij) za duże. Chcesz przesuwać sprajta o 400 w osi X i 300 w osi Y podczas gdy całe okno jest jedynie 2x większe? Będziesz widział go tylko w 2 pozycjach. metoda move to nie setPosition! Ona przesuwa a nie ustawia pozycje |
|
Elderion Temat założony przez niniejszego użytkownika |
Jeszcze coś » 2013-05-05 10:21:43 Nie wiem czy ten kod jest dobry, ale nie mogę go przetestować bo się zawiesza. Czemu się zawiesza? #include <SFML/Graphics.hpp>
int main() { sf::RenderWindow okno( sf::VideoMode( 800, 700 ), "GRA" ); sf::Texture ludzio; ludzio.loadFromFile( "ludzio.png" ); sf::Sprite ludzik; ludzik.setTexture( ludzio ); while( okno.isOpen() ) { sf::Event zamknij; while( okno.pollEvent( zamknij ) ) { if( zamknij.type == sf::Event::Closed ) okno.close(); } sf::Event ruszanie; while( okno.isOpen() ) { if( sf::Keyboard::isKeyPressed( sf::Keyboard::D ) ) { ludzik.move( 10, 0 ); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::A ) ) { ludzik.move( - 10, 0 ); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::W ) ) { ludzik.move( 0, 10 ); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::S ) ) { ludzik.move( 0, - 10 ); } } okno.clear(); okno.draw( ludzik ); okno.display(); } return 0; }
|
|
RazzorFlame |
» 2013-05-05 11:02:17 O boże. Po pierwsze nie twórz 2 eventów. Po drugie nie twórz ich w pętli. Po trzecie masz 1 pętle okno.isOpen() i w niej drugą pętle okno.isOpen(). Ahh poprawny kod powinien wyglądać w ten sposób: Kiedy troche więcej się nauczysz to zastosuj do tej pętli timer lub pętle stałokrokową. |
|
pekfos |
» 2013-05-05 11:23:00 Po pierwsze nie twórz 2 eventów. |
Co to ma do rzeczy? Po drugie nie twórz ich w pętli. |
Jak wyżej? Jak chce sobie mieć taki kod, to chyba nie będziesz go na siłę nawracać.. |
|
RazzorFlame |
» 2013-05-06 07:43:25 @UP to chyba jasne nie? Może to tak zabrzmiało ale miałem dobre intencje i nie chodziło mi na siłe tylko jeśli już mam doradzać to chyba moge o tym wspomnieć? Jeśli się nauczy tworzyć zmienne w pętli to potem może je notorycznie stawiać a program będzie mulił. Lepiej już chyba go teraz uprzedzić nie? |
|
« 1 » 2 |