[SFML 2.0] Proste strzelanie, a zatrzymanie pocisku po zwolnieniu spacji
Ostatnio zmodyfikowano 2012-11-15 16:30
wojownik266 Temat założony przez niniejszego użytkownika |
[SFML 2.0] Proste strzelanie, a zatrzymanie pocisku po zwolnieniu spacji » 2012-11-15 15:02:11 Po paru godzinach wytężonej pracy i myślenia, wyprodukowałem program którego kod zamieszczam poniżej. Program w 95% działa zgodnie z moim pomysłem. Problemem natomiast jest to że kiedy zwolnię spacje to pocisk zostaje w tym miejscu w którym zastała go zwolniona spacja... Czy ktoś mógłby rzucić okiem na ten kod i powiedzieć co jest nie tak, co dopisać, co wyrzucić, co zmienić itd...? Byłbym niezmiernie wdzięczny za wszystkie odpowiedzi poparte odpowiednim kodem...Dziękuję! #include <SFML/Graphics.hpp>
int main() { sf::RenderWindow App( sf::VideoMode( 640, 480, 32 ), " SFML 2.0 Proste Strzelanie" ); sf::Texture statek, pocisk; statek.loadFromFile( "statek.png" ); pocisk.loadFromFile( "pocisk.png" ); sf::Sprite Statek( statek ); sf::Sprite Pocisk( pocisk ); float statx = 320, staty = 420; float pocx = 345, pocy = 440; float tpocx = 345, tpocy = 440; while( App.isOpen() ) { sf::Event Event; while( App.pollEvent( Event ) ) { if(( Event.type == sf::Event::Closed ) ||( Event.type == sf::Event::KeyPressed ) &&( Event.key.code == sf::Keyboard::Escape ) ) { App.close(); } } if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) ) { statx -= 0.5; pocx -= 0.5; } if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) ) { statx += 0.5; pocx += 0.5; } if( sf::Keyboard::isKeyPressed( sf::Keyboard::Space ) ) { pocy -= 0.5; tpocy -= 0.5; if( tpocy <= 0 && pocy <= 0 ) { tpocx = statx + 20; tpocy = staty + 25; pocx = statx + 20; pocy = staty + 25; Pocisk.setPosition( pocx, pocy ); } } Pocisk.setPosition( tpocx, tpocy ); Statek.setPosition( statx, staty ); App.clear(); App.draw( Pocisk ); App.draw( Statek ); App.display(); } return EXIT_SUCCESS; }
|
|
SeaMonster131 |
» 2012-11-15 15:54:15 Możesz to napisać mniej więcej tak: bool strzal = false;
if( spacja ) { pociskX = bohaterX; pociskY = bohaterY; strzal = true; }
if( strzal ) { przemieszczanie pocisku; if( pocisk wyjdzie poza ekran && itd ) strzal = false; }
|
|
wojownik266 Temat założony przez niniejszego użytkownika |
» 2012-11-15 16:30:30 Wszystko działa aż miło. Poniżej kod z naniesionymi poprawkami. Może komuś się przyda. SeaMonster131 Jesteś wielki! Dziękuję! #include <SFML/Graphics.hpp>
int main() { sf::RenderWindow App( sf::VideoMode( 640, 480, 32 ), " SFML 2.0 Proste Strzelanie" ); sf::Texture statek, pocisk; statek.loadFromFile( "statek.png" ); pocisk.loadFromFile( "pocisk.png" ); sf::Sprite Statek( statek ); sf::Sprite Pocisk( pocisk ); float statx = 320, staty = 420; float pocx = 345, pocy = 440; bool shoot = false; while( App.isOpen() ) { sf::Event Event; while( App.pollEvent( Event ) ) { if(( Event.type == sf::Event::Closed ) ||( Event.type == sf::Event::KeyPressed ) &&( Event.key.code == sf::Keyboard::Escape ) ) { App.close(); } } if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) ) { statx -= 0.5; } if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) ) { statx += 0.5; } if( sf::Keyboard::isKeyPressed( sf::Keyboard::Space ) ) { pocx = statx + 20; pocy = staty + 25; Pocisk.setPosition( pocx, pocy ); shoot = true; } if( shoot ) { pocy -= 0.5; if( pocy <=( - 10 ) ) { shoot = false; } } Pocisk.setPosition( pocx, pocy ); Statek.setPosition( statx, staty ); App.clear(); App.draw( Pocisk ); App.draw( Statek ); App.display(); } return EXIT_SUCCESS; }
|
|
« 1 » |