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

[SFML 2.1] Problem z wyświetleniem obrazka

Ostatnio zmodyfikowano 2013-12-13 23:44
Autor Wiadomość
Lazarencjusz
Temat założony przez niniejszego użytkownika
[SFML 2.1] Problem z wyświetleniem obrazka
» 2013-12-12 23:57:25
Witam.

Mam problem z wyświetleniem obrazka w swojej pseudo grze. Nie chodzi tutaj o proste:

C/C++
Texture tekstura;
tekstura.loadFromFile( "samolot.png" );

Sprite samolocik;
samolocik.setTexture( tekstura ).

Lecz o zrobieniu tego na klasach.

Nie mam też problemu w ogarnięciu tego jak klasy będą wyglądać. Problem zaczyna się w momencie, kiedy do klasy, która wczyta teksturę na sprajta przekazuję teksturę. Wtem nieważne co to za tekstura i jak zainicjowana, zamiast obrazka mam biały kwadrat o rozmiarach pliku samolot.png (np). Podmieniając obrazek kwadrat zmienia rozmiary na wielkość wczytanego pliku graficznego.

Oto kod z grubsza:
C/C++
Sprajt * samolot; // globalnie

//w main już
Texture tekstura;
tekstura.loadFromFile( "samolot.png" );

stworzObiekty( tekstura );


//w/w funkcja:

void stworzObiekty( Texture tekstura )
{
    samolot = new Sprajt( tekstura );
}

Oczywiście błąd robi się przez przekazanie zmiennej Texture. Dziwne że potrafi zrobić biały prostokad o wymiarach obrazka i w miejscu gdzie ma być... Próbowałem referencji (nie kompiluje się) wskaźników (i tak nie działa jak już się kompiluje).

Więc, bardzo proszę o pomoc, bo nie wiem co mam z tym robić.
P-99076
DejaVu
» 2013-12-13 00:15:31
Banalny problem, wielokrotnie rozwiązany u nas na forum. Przekazuj obiekty tekstur przez referencję.
P-99077
Lazarencjusz
Temat założony przez niniejszego użytkownika
» 2013-12-13 09:48:49
OK, poszukam. Lecz osobiście próbowałem przez referencję i nie działało. Może robiłem to źle... Zobaczymy.
P-99085
Lazarencjusz
Temat założony przez niniejszego użytkownika
» 2013-12-13 10:52:09
Przeszukałem forum pod kątem tego co potrzebuję, lecz żadne rozwiązanie się nie nadawało. Menadżer tekstur też się nie nadawał (ten z forum). Przekazując przez referencję w sposób c i c++ też nie działa. Nawet jak zmienna teksturowa jest globalna. Da ktoś radę napisać mały programik, gdzie tekstura jest przekazywana do funkcji gdzie tworzony jest sprajt? Tylko tyle potrzebuję.

//edit:

Do funkcji tworzącej sprajta przekazać chcę konkretnego sprajta i teksturę dla niego.
P-99087
maly
» 2013-12-13 12:08:01
Próbowałem referencji (nie kompiluje się)
Może robiłem to źle
Nie kompiluje się bo robisz coś źle.

Przeszukałem forum pod kątem tego co potrzebuję, lecz żadne rozwiązanie się nie nadawało
Rozwiązanie to prawie zawsze referencja.

Da ktoś radę napisać mały programik, gdzie tekstura jest przekazywana do funkcji gdzie tworzony jest sprajt? Tylko tyle potrzebuję.
&
P-99089
DejaVu
» 2013-12-13 12:16:56
P-99091
Lazarencjusz
Temat założony przez niniejszego użytkownika
» 2013-12-13 22:56:17
Z podanego linku powyżej udało mi się wyciągnąć coś takiego:

C/C++
int zwiekszIloscTekstur()
{
    static int x = 0;
    ++x;
    return x;
}


sf::Sprite utworzSprite( String lokalizacjaPliku, int pozX, int pozY )
{
    int x = zwiekszIloscTekstur();
    static Texture tex[ 10 ];
    tex[ x ].loadFromFile( lokalizacjaPliku );
    sf::Sprite spr( tex[ x ] );
    spr.setPosition( pozX, pozY );
    spr.setScale( 1, 1 );
    return spr;
}


// w main:

Sprite spr;
spr = utworzSprite( "samolot.png", 0, 0 );

Sprite spr2;

spr2 = utworzSprite( "gfx/edytor/strzalkaOknaGora.png", - 100, - 100 );

Rekurencję wiem jak używać, lecz nie działa to dla przekazania tekstury. Jakby działało to bym dawno sobie z tym poradził. Chyba, się bardzo mylę i ktoś mnie oświeci (taki ot chwyt :) )?

To moje rozwiązanie ma taką wadę, mam tam tablicę i muszę znać ilość tekstur w moim programie. Trudno, może jakoś to przeboleję.
P-99153
Lazarencjusz
Temat założony przez niniejszego użytkownika
» 2013-12-13 23:44:56
W zasadzie po przerobieniu kilku namoconych wersji mojego programu, wróciłem do tej pierwszej, od której się wszystko zaczęło. Na zmiennych globalnych (klasowych) i po przekazaniu w odpowiednim miejscu referencji, działa wszystko tak jak chciałem.

Zamykam więc dziękując za waszą pomoc :)
P-99156
« 1 »
  Strona 1 z 1