Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Kolizje - Problem z sprite'ami

Ostatnio zmodyfikowano 2016-06-06 19:42
Autor Wiadomość
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:
C/C++
#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 ) ); // <-- Tu chciałbym wstawić tego sprite'a
    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:
C/C++
sf::Texture tekstura; ///deklaracja tekstury
tekstura.loadFromFile( "sprite do wykorzystania2.png" );

sf::Sprite obrazek;
obrazek.setTexture( tekstura );
P-148891
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 ? :

C/C++
#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; ///deklaracja tekstury
    tekstura.loadFromFile( "sprite do wykorzystania2.png" sf::IntRect( 60, 137 ) ); ///nazwa sprite do wczytania wraz z sciezka
   
    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; /// << bez tej funkcji sf::Sprite funkcja draw nie będzie działać !!!
    obrazek.setTexture( tekstura );
    obrazek.setPosition( 250, 210 ); ///pozycja pierwsza to x druga to y
   
    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; // error
   
    // Define a rectangle, located at (0, 0) with a size of 20x5
    sf::IntRect r1( 0, 0, 640, 75 );
    // Define another rectangle, located at (4, 2) with a size of 18x10
    sf::Vector2i position( 250, 210 );
    sf::Vector2i size( 60, 137 );
    sf::IntRect r2( position, size );
    // Test intersections with the point (3, 1)
    bool b1 = r1.contains( 3, 1 ); // true
    bool b2 = r2.contains( 3, 1 ); // false
    // Test the intersection between r1 and r2
    sf::IntRect result;
    bool b3 = r1.intersects( r2, result ); // true
    // result == (4, 2, 16, 3)
   
   
    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 ) ///gdy nacisniemy strzalke w prawo to postac idzie w prawo
                 obrazek.move( + 2, 0 );
           
            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Left ) ///gdy nacisniemy strzalke w prawo to postac idzie w lewo
                 obrazek.move( - 2, 0 );
           
            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Up ) ///gdy nacisniemy strzalke w gore to postac idzie w gore
                 obrazek.move( 0, - 2 );
           
            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Down ) ///gdy nacisniemy strzalke w dol to postac idzie w dol
                 obrazek.move( 0, + 2 );
           
            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Space ) ///gdy nacisniemy spacje to postac idzie piec pikseli do gory
                 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 ) ///gdy nacisniemy spacje to postac idzie piec pikseli do gory
                 music.pause();
           
            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Return ) ///gdy nacisniemy spacje to postac idzie piec pikseli do gory
                 music.play();
           
            if( zdarzenie.type == sf::Event::Closed ) ///Gdy wyłączymy klikajac na "czerowny krzyzyk"
                 oknoAplikacji.close();
           
            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape ) ///gdy nacisniemy ESC
                 oknoAplikacji.close();
           
            if( zdarzenie.type == sf::Event::MouseButtonPressed && zdarzenie.mouseButton.button == sf::Mouse::Middle ) ///gdy nacisniemy środ.przycisk myszki
                 oknoAplikacji.close();
           
        }
        oknoAplikacji.clear( sf::Color::Blue ); ///Wazne!!!! Nazwy kolorow z Duzej litery!!!!
        oknoAplikacji.draw( obrazek ); ///narysowanie sprite'a na ekranie
        oknoAplikacji.draw( obrazek2 );
        oknoAplikacji.draw( obrazek3 );
        oknoAplikacji.display();
    }
   
    return 0;
}
P-148932
« 1 »
  Strona 1 z 1