dawid Temat założony przez niniejszego użytkownika |
[SFML 2.1] Poruszanie sprajtem » 2014-01-11 18:01:48 Witam, w jaki sposób poruszyć sprajtem w prawo? Chcę zrobić coś w rodzaju biegania. Mam taki kod: #include <SFML/Graphics.hpp> int main() { sf::RenderWindow okno( sf::VideoMode( 800, 600 ), "Ruch obiektow" ); sf::Font font; font.loadFromFile( "tungab.ttf" ); sf::Text Text; Text.setFont( font ); Text.setString( "Ruch obiektow" ); sf::Texture tekstura; tekstura.loadFromFile( "image/4.png" ); sf::Sprite obrazek; obrazek.setTexture( tekstura ); Text.setPosition( 100, 100 ); while( okno.isOpen() ) { sf::Event event; while( okno.pollEvent( event ) ) { if( event.type == sf::Event::Closed ) okno.close(); if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) ) { obrazek.setPosition( 20, 20 ); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) ) { Text.setString( "Strzalka lewo" ); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) ) { Text.setString( "Strzalka gora" ); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) ) { Text.setString( "Strzalka dol" ); } } okno.clear(); okno.draw( Text ); okno.draw( obrazek ); okno.display(); } return 0; }
Jak poruszyć obiektem? obrazek.setPosition( 20, 20 ); |
|
ShadowkhaN |
» 2014-01-11 18:07:05 float position_x = 0; float position_y = 0;
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) ) { obrazek.setPosition( position_x++, position_y ); } Oczywiście wartości początkowe, czyli position_x ustawiasz wedle uznania. |
|
MrPoxipol |
» 2014-01-11 19:06:52 |
|
dawid Temat założony przez niniejszego użytkownika |
» 2014-01-11 21:16:43 Ale chodziło mi o coś takiego, że wiele razy wciskam prawy przycisk i wiele razy się przesuwa. |
|
dawid Temat założony przez niniejszego użytkownika |
» 2014-01-11 21:31:36 Ok mam tylko czemu obrazek przesuwa się cały czas nie w prawo tylko na południowy-wschód? |
|
ShadowkhaN |
» 2014-01-11 21:59:05 Zapewne używasz funkcji move, to jeżeli jej używasz to zwiększaj tylko pozycję x, a nie x i y :/ Czyli chyba move(x,0); |
|
dawid Temat założony przez niniejszego użytkownika |
» 2014-01-12 00:41:45 Ok działa tylko nie wszystko. Tak mam dla strzałki w prawo i na dół: if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) ) { Text.setString( "Strzalka w prawo" ); obrazek.move( position_x++, 0 ); }
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) ) { obrazek.move( 0, position_y++ ); Text.setString( "Strzalka dol" ); }
Ale jak zrobić w lewo i do góry? |
|
ShadowkhaN |
» 2014-01-12 09:23:03 Hmm, no jeżeli position_x++ przesuwa obrazek w prawo no to chyba normalne, że position_x-- przesunie obrazek w lewo? xD Podobnie z góra i dół. I na Twoim miejscu nie robił bym tego move(position_x++, 0), jak co to move(position_x, 0) bo jak będziesz zwiększał position_x ciągle to z czasem będzie tak duża wartość, że nawet nie zobaczysz jak się porusza obrazek :) Możesz zrobić tak #include <SFML/Graphics.hpp> int main() { sf::RenderWindow okno( sf::VideoMode( 800, 600 ), "Ruch obiektow" ); sf::Font font; font.loadFromFile( "tungab.ttf" ); sf::Text Text; Text.setFont( font ); Text.setString( "Ruch obiektow" ); sf::Texture tekstura; tekstura.loadFromFile( "image/4.png" ); sf::Sprite obrazek; obrazek.setTexture( tekstura ); Text.setPosition( 100, 100 ); while( okno.isOpen() ) { sf::Event event; while( okno.pollEvent( event ) ) { if( event.type == sf::Event::Closed ) okno.close(); if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) ) { position_x++; } if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) ) { position_x--; } if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) ) { position_y--; } if( sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) ) { position_y++; } } okno.clear(); okno.draw( Text ); obrazek.setPosition( position_x, position_y ); okno.draw( obrazek ); okno.display(); } return 0; } |
|
« 1 » 2 |