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

[SFML 2.1] Nakładanie grafiki

Ostatnio zmodyfikowano 2013-09-12 15:58
Autor Wiadomość
DzieckoBezZycia
Temat założony przez niniejszego użytkownika
[SFML 2.1] Nakładanie grafiki
» 2013-09-12 13:34:39
Siema!
Mam taki problem, otóż w Allegro tworzy się bufor i nakłada grafikę i tworząc mapę można ją było tworzyć z "kafelków" grafiki rysowanej wielokrotnie na jednym buforze. W SFML'u sprawa ma się inaczej. Tworząc sprite tworzy się od razu pod niego bufor, więc trzeba by było dla każdego kafelka tworzyć oddzielnego sprite. Jak można to inaczej zrobić.
P-91980
kubawal
» 2013-09-12 14:52:59
Sprite to tylko taki sf::Texture z ustaloną pozycją na ekranie.
sf::Sprite przechowuje referencję do swojego Texture (ustawianą za pomocą setTexture())
Więcej informacji:
http://sfml-dev.org​/documentation/2.1​/classsf_1_1Sprite.php

/edit:
Tylko musisz pilnować, by póki sprite był przywiązany do tekstury, to ona istniała. A więc nigdy nie rób czegoś takiego:
C/C++
void ZaladujSprite( Sprite & s )
{
    Texture t;
    loadFromFile( "bleble.png" );
    s.setTexture( t );
}

int main()
{
    Sprite s;
    ZaladujSprite( s );
   
    //...

Do takich zastosowań najlepiej tworzyć sobie klasy wykorzystujące technikę RAII
P-91996
MrPoxipol
» 2013-09-12 15:48:00
@up Można tak zrobić, pod warunkiem, że utworzysz obiekt sf::Texture jako statyczny.

C/C++
sf::Sprite load()
{
    /*/ / Takie na szybko; ) */
    static sf::Texture tex;
    tex.loadFromFile( "img.bmp" );
    return sf::Sprite( tex );
}

//..
sf::Sprite spr = load();

/edit: @DV czyżby błąd w parserze?

@down
Tak wiem, ale podałem, że można tak zrobić, jak pokazał wcześniej @kubwal
P-92011
pekfos
» 2013-09-12 15:50:44
I za każdym razem ładować teksturę?
P-92012
kubawal
» 2013-09-12 15:52:40
@MrPoxipol, pewnie to go zmyliło:
/*/
@temat
Lepiej sobie utworzyć klasę obiektu
C/C++
class Player
{
    Texture plTex;
    Sprite pl;
    //...
   
public:
   
    Player( string file, /*...*/ );
    //...
}
Jeśli planujesz utworzyć więcej obiektów, zastosuj TextureMenager'a.

/edit: Zapomniałem jeszcze dodać w pierwszym poście, że do jednego Texture może być przywiązane kilka Sprite'ów.
P-92013
MrPoxipol
» 2013-09-12 15:58:00
@up lepiej od razu ResourceManager'a, bo wygodniej się zarządza ;) (sam się na tym przekonałem, z oddzielnymi klasami dla Tekstur, Czcionek, Dźwięków, to jest bardzo niewygodnie ;))
P-92014
« 1 »
  Strona 1 z 1