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

Kontener obiektów, SFML

Ostatnio zmodyfikowano 2014-01-29 15:18
Autor Wiadomość
kubawal
» 2014-01-28 19:47:49
C/C++
texture.push_back( sf::Texture );
Powinno być
texture.push_back( sf::Texture() );

Poza tym większość obiektów w SFML nie przechowuje się w kontenerach, tylko tworzy się je w pam. wolnej, a w kontenerach przechowuje się wskaźniki do nich
C/C++
vector < sf::Sprite *> objs;

//...
// później tworzymy je mniej więcej tak:

sf::Sprite * costam = new sf::Sprite;
objs.push_bask( costam );
// tutaj ustawiamy inne parametry costam
Nie zapomnij o usunięciu wszystkich elementów objs, kiedy przestaną być potrzebne.
P-103460
Vesper7
Temat założony przez niniejszego użytkownika
» 2014-01-28 20:14:49
nie za bardzo mi poszło, ale też nie wiem czy to dobrze zastosowałem
C/C++
#include <SFML/Graphics.hpp>
#include <vector>
#include <string>


int main()
{
    sf::RenderWindow window( sf::VideoMode( 1600, 1200 ), "GFX" );
   
    std::vector < sf::Sprite *> sprite;
    std::vector < sf::Texture *> texture;
    std::string nazwa;
   
    for( int i = 0; i < 3; i++ )
    {
        sf::Sprite * s_schowek = new sf::Sprite();
        sf::Texture * t_schowek = new sf::Texture();
        texture.push_back( s_schowek );
        nazwa = "GFX/";
        nazwa +=( i + '0' );
        nazwa += ".png";
        texture[ i ].loadFromFile( nazwa.c_str() );
        sprite.push_back( t_schowek );
        sprite[ i ].setTexture( texture[ i ] );
        delete s_schowek;
        delete t_schowek;
       
    }
   
    while( window.isOpen() )
    {
        sf::Event event;
        while( window.pollEvent( event ) )
        {
            if( event.type == sf::Event::Closed )
                 window.close();
           
            if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Return )
                 window.close();
           
        } //while
        window.clear( sf::Color::White );
        window.draw( sprite[ 2 ] ); //przykładowo
        window.display();
    } //while
    return 0;
}
Wywala błędy niestety
P-103461
kubawal
» 2014-01-28 20:33:12
C/C++
delete s_schowek;
delete t_schowek;

Źle mnie zrozumiałeś. Obiekty usuwasz na końcu, kiedy nie będą potrzebne i nie będziesz ich już rysował.
P-103465
Vesper7
Temat założony przez niniejszego użytkownika
» 2014-01-28 20:41:36
niestety błędy dalej te same
P-103469
RazzorFlame
» 2014-01-28 23:04:43
C/C++
texture.push_back( s_schowek );
sprite.push_back( t_schowek );
Coś ci sie porąbało ;)
P-103480
Vesper7
Temat założony przez niniejszego użytkownika
» 2014-01-29 11:47:03
sorki faktycznie pomieszałem troszeczkę ale niestety dalej nie gra pobawiłem się jeszcze dzisiaj chwilkę i teraz mi wywala błędy już po uruchomieniu a stanąłem na czymś takim:
C/C++
#include <SFML/Graphics.hpp>
#include <vector>
#include <string>
#include <iostream>


int main()
{
    sf::RenderWindow window( sf::VideoMode( 600, 600 ), "GFX" );
   
    std::vector < sf::Sprite *> sprite;
    std::vector < sf::Texture *> texture;
    std::string nazwa;
   
    for( int i = 0; i < 2; i++ )
    {
        sf::Texture * t_schowek;
        texture.push_back( t_schowek = new sf::Texture() );
        std::cout << texture.size() << std::endl;
        delete t_schowek;
        nazwa = "GFX/";
        nazwa +=( i + '0' );
        nazwa += ".png";
        texture[ i ]->loadFromFile( nazwa.c_str() );
        sf::Sprite * s_schowek;
        sprite.push_back( s_schowek = new sf::Sprite() );
        std::cout << sprite.size() << std::endl;
        delete s_schowek;
        sprite[ i ]->setTexture( * texture[ i ] );
    }
   
    while( window.isOpen() )
    {
        sf::Event event;
        while( window.pollEvent( event ) )
        {
            if( event.type == sf::Event::Closed )
                 window.close();
           
            if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Return )
                 window.close();
           
        } //while
        window.clear( sf::Color::White );
        window.draw( * sprite[ 2 ] );
        window.display();
    } //while
    return 0;
}
a i jak by co obiekty usuwam po przebiegu pętli żeby się inne obrazki do kolejnych elementów ładowały a nie te same
a oto co mi debugger wywala
http://prntscr.com/2nl8d9
sam za bardzo nie wiem o co mu chodzi
 
P-103494
RazzorFlame
» 2014-01-29 12:45:54
Co ty, chłopie! Z choinki żeś się urwał? Ten vector teraz przyjmuje WSKAŹNIKI a nie obiekty! Nie kopiujesz do vectora tych obiektów tylko same wskaźniki! OBIEKTY TEKSTUR MUSZĄ ZOSTAĆ W PAMIĘCI DOPÓKI WYKORZYSTUJESZ WSKAŹNIKI NA NIE POKAZUJĄCE! Dlaczego więc usuwasz obiekt t_schowek i s_schowek? Poczytaj o działaniu wskaźników i dopiero bierz się za takie rzeczy.
P-103498
Vesper7
Temat założony przez niniejszego użytkownika
» 2014-01-29 13:10:11
Faktycznie jeszcze wskaźników nie opanowałem, to też się z nimi jeszcze postaram zaznajomić, wiec się jeszcze spytam czy innego sposobu zatem nie ma do powkładania tych tekstur do tego vectora niż korzystanie ze wskaźników ??
P-103503
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona