[SFML, C++] Wycinanie części obrazu z kontenera std::map
Ostatnio zmodyfikowano 2011-08-25 15:55
Dark Temat założony przez niniejszego użytkownika |
[SFML, C++] Wycinanie części obrazu z kontenera std::map » 2011-08-25 13:06:08 Witam, mam problem z wycinaniem części obrazu, ponieważ wyświetla mi cały obraz zamiast wycinać jego część z kontenera std::map, otóż mam takie linijki kodu i one wyświetlają całe obrazy a nie ich część:
sf::Sprite & Boh =( * SprajtyP->SprajtMap.find( "hero" ) ).second;
if( klatka <= 30 && stand ) { if( klatka < 15 ) Boh.SetSubRect( sf::IntRect( 0, 0, 40, 40 ) ); else Boh.SetSubRect( sf::IntRect( 0, 40, 40, 80 ) ); klatka++; } else klatka = 0;
@edit Poradziłem sobie tworząc zmienną sf::Sprite lecz w tej zmiennej nie wyświetla mi obrazu |
|
DejaVu |
» 2011-08-25 13:28:53 Najwyraźniej stand = false; .
PS. * SprajtyP->SprajtMap.find( "hero" ) ten kod jest błędny :) |
|
Dark Temat założony przez niniejszego użytkownika |
» 2011-08-25 13:31:41 A co w tym kodzie jest błędnego?
PS. stand = true :P |
|
DejaVu |
» 2011-08-25 13:32:49 jeżeli hero nie istnieje = wywalenie aplikacji :)
/edit:
|
|
Dark Temat założony przez niniejszego użytkownika |
» 2011-08-25 13:37:14 |
|
DejaVu |
» 2011-08-25 13:59:39 no to może renderujesz coś innego niż myślisz :) |
|
Dark Temat założony przez niniejszego użytkownika |
» 2011-08-25 14:08:18 Obraz to dokładnie się tworzy w tym:
SprajtyP->AddImage( "ludz1.png" ); SprajtyP->AddNameSprite( "hero", "ludz1.png" );
a klasa Sprite'owa i Image'owa wygląda tak i klasa Sprite dziedziczy z Image'a:
class Image { protected: map < string, sf::Image > ImageMap; public: void AddImage( string FileName ) { sf::Image & ImageI = ImageMap[ FileName ]; if( ImageI.LoadFromFile( FileName ) ) { ImageI.SetSmooth( false ); } else cout << "Błąd wczytywania " << FileName << endl; } void ListOfImage() { if( !ImageMap.empty() ) { map < string, sf::Image >::iterator itImageMap; short int Lp = 1; cout << "Lista obrazow" << endl; for( itImageMap = ImageMap.begin(); itImageMap != ImageMap.end(); itImageMap++ ) { cout << Lp << ". " <<( * itImageMap ).first << endl; Lp++; } } else cout << "Brak images" << endl; } };
class Sprite : public Image { public: map < string, sf::Sprite > SprajtMap; void AddNameSprite( string SprajtName, string ImageSrc ) { sf::Sprite & SprajtO = SprajtMap[ SprajtName ]; SprajtO.SetImage(( * ImageMap.find( ImageSrc ) ).second ); } void ListSprajtIm() { if( !SprajtMap.empty() ) { cout << "Sprajty" << endl; map < string, sf::Sprite >::iterator itSprajtMap; for( itSprajtMap = SprajtMap.begin(); itSprajtMap != SprajtMap.end(); itSprajtMap++ ) cout << "SprajtMap - " <<( * itSprajtMap ).first << endl; } else cout << "Brak jakiegokolwiek sprite'a" << endl; } };
@edit Może nie da rady przesłać z mapy Image'ów do mapy Sprite'ów?
@edit2 też trzeba użyć '&' do mapy Image'ów. Skąd mam wiedzieć kiedy używać ampresandu a kiedy nie? Gdzie mogę o tym przeczytać? |
|
SeaMonster131 |
» 2011-08-25 14:49:20 |
|
« 1 » 2 |