SadBoy98 Temat założony przez niniejszego użytkownika |
Kolizje - Problem z sprite'ami » 2016-06-05 17:58:26 Otóż mam problem bo nie wiem za bardzo jak w kodzie wstawić sprite'a Oto kod: #include <SFML/Graphics.hpp> #include <vector> class cGracz { sf::RectangleShape kwadrat; float predkosc = 150.f; bool doGory, doDolu, wPrawo, wLewo; public: cGracz( sf::Vector2f rozmiar ) { kwadrat.setSize( rozmiar ); } void zmienPozycje( sf::Vector2f pozycja ) { kwadrat.setPosition( pozycja ); } void aktualizuj() { doGory = false; doDolu = false; wLewo = false; wPrawo = false; if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) ) doGory = true; if( sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) ) doDolu = true; if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) ) wLewo = true; if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) ) wPrawo = true; } void ruch( sf::Vector2f v ) { kwadrat.move( v ); } sf::Vector2f ruch( sf::Time czas ) { sf::Vector2f v( 0, 0 ); if( doGory ) v.y -= predkosc; if( doDolu ) v.y += predkosc; if( wLewo ) v.x -= predkosc; if( wPrawo ) v.x += predkosc; return v * czas.asSeconds(); } sf::FloatRect doKolizji() { return kwadrat.getGlobalBounds(); } void rysuj( sf::RenderWindow & okno ) { okno.draw( kwadrat ); } };
class Kolizje { public: static void czyKoliduje( cGracz & g1, std::vector < cGracz > V, sf::Vector2f ruch ) { sf::FloatRect X = g1.doKolizji(); sf::FloatRect Y = g1.doKolizji(); X.left += ruch.x; Y.top += ruch.y; bool kolX = false; bool kolY = false; for( int i = 0; i < V.size(); i++ ) if( X.intersects( V[ i ].doKolizji() ) ) kolX = true; else if( Y.intersects( V[ i ].doKolizji() ) ) kolY = true; if( !kolX ) g1.ruch( sf::Vector2f( ruch.x, 0 ) ); if( !kolY ) g1.ruch( sf::Vector2f( 0, ruch.y ) ); } };
int main() { sf::RenderWindow oknoAplikacji( sf::VideoMode( 800, 600 ), "Kolizje" ); sf::Clock zegar; sf::Time CzasOdAktualizacji = sf::Time::Zero; const sf::Time KrokCzasowy = sf::seconds( 1.f / 160.f ); cGracz gracz( sf::Vector2f( 50, 50 ) ); cGracz on( sf::Vector2f( 50, 50 ) ); on.zmienPozycje( sf::Vector2f( 200, 200 ) ); cGracz inny( sf::Vector2f( 50, 50 ) ); inny.zmienPozycje( sf::Vector2f( 300, 300 ) ); cGracz inny2( sf::Vector2f( 50, 50 ) ); inny2.zmienPozycje( sf::Vector2f( 380, 180 ) ); std::vector < cGracz > V; V.push_back( on ); V.push_back( inny ); V.push_back( inny2 ); while( oknoAplikacji.isOpen() ) { sf::Time Czas = zegar.restart(); CzasOdAktualizacji += Czas; gracz.aktualizuj(); while( CzasOdAktualizacji > KrokCzasowy ) { CzasOdAktualizacji -= KrokCzasowy; sf::Event zdarzenie; while( oknoAplikacji.pollEvent( zdarzenie ) ) { if( zdarzenie.type == sf::Event::Closed ) oknoAplikacji.close(); } Kolizje::czyKoliduje( gracz, V, gracz.ruch( KrokCzasowy ) ); } oknoAplikacji.clear(); gracz.rysuj( oknoAplikacji ); for( int i = 0; i < V.size(); i++ ) V[ i ].rysuj( oknoAplikacji ); oknoAplikacji.display(); } return 0; }
A tu sprite który chce wstawic: sf::Texture tekstura; tekstura.loadFromFile( "sprite do wykorzystania2.png" );
sf::Sprite obrazek; obrazek.setTexture( tekstura );
|
|
SadBoy98 Temat założony przez niniejszego użytkownika |
» 2016-06-06 19:42:09 UP Pomijając tamto może mi ktoś wyjaśnić co jest w tym kodzie nie tak ? : #include <SFML/Graphics.hpp> #include <SFML/Audio.hpp> #include <vector>
int main() { sf::RenderWindow oknoAplikacji( sf::VideoMode( 640, 480, 32 ), "Moja Wlasna Przeswietna Gra w skrocie MWPG" ); sf::Texture tekstura; tekstura.loadFromFile( "sprite do wykorzystania2.png" sf::IntRect( 60, 137 ) ); sf::Texture tekstura2; tekstura2.loadFromFile( "KAMIEN.jpg", sf::IntRect( 50, 50, 640, 75 ) ); sf::Texture tekstura3; tekstura3.loadFromFile( "KAMIEN.jpg", sf::IntRect( 50, 50, 640, 300 ) ); sf::Texture tekstura4; tekstura4.loadFromFile( "Lewy profil.png", sf::IntRect( 60, 137, 60, 137 ) ); sf::Sprite obrazek, obrazek2, obrazek3, obrazek4; obrazek.setTexture( tekstura ); obrazek.setPosition( 250, 210 ); obrazek2.setTexture( tekstura2 ); obrazek2.setPosition( 0, 0 ); obrazek3.setTexture( tekstura3 ); obrazek3.setPosition( 0, 345 ); obrazek4.setTexture( tekstura4 ); obrazek4.setScale( 0.5, 0.65 ); obrazek4.setPosition( 250, 210 ); sf::Music music; if( !music.openFromFile( "muza.ogg" ) ) return - 1; sf::IntRect r1( 0, 0, 640, 75 ); sf::Vector2i position( 250, 210 ); sf::Vector2i size( 60, 137 ); sf::IntRect r2( position, size ); bool b1 = r1.contains( 3, 1 ); bool b2 = r2.contains( 3, 1 ); sf::IntRect result; bool b3 = r1.intersects( r2, result ); music.setLoop( true ); music.play(); while( oknoAplikacji.isOpen() ) { sf::Event zdarzenie; while( oknoAplikacji.pollEvent( zdarzenie ) ) { if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Right ) obrazek.move( + 2, 0 ); if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Left ) obrazek.move( - 2, 0 ); if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Up ) obrazek.move( 0, - 2 ); if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Down ) obrazek.move( 0, + 2 ); if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Space ) obrazek.move( 0, - 15 ); if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::I ) obrazek.rotate( 180 ); if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::K ) obrazek.rotate( - 180 ); if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Tab ) music.pause(); if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Return ) music.play(); if( zdarzenie.type == sf::Event::Closed ) oknoAplikacji.close(); if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape ) oknoAplikacji.close(); if( zdarzenie.type == sf::Event::MouseButtonPressed && zdarzenie.mouseButton.button == sf::Mouse::Middle ) oknoAplikacji.close(); } oknoAplikacji.clear( sf::Color::Blue ); oknoAplikacji.draw( obrazek ); oknoAplikacji.draw( obrazek2 ); oknoAplikacji.draw( obrazek3 ); oknoAplikacji.display(); } return 0; }
|
|
« 1 » |