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

SFML2 - Mapa kaflowa, jak wyswietlić ?

Ostatnio zmodyfikowano 2012-12-31 10:30
Autor Wiadomość
Someone.
Temat założony przez niniejszego użytkownika
SFML2 - Mapa kaflowa, jak wyswietlić ?
» 2012-12-30 11:34:37
Witam wszystkich, mam mape kafelkowa:
sf::Sprite mapaKafelkowa[ 25 ][ 18 ];

Wypelniam ja tak:
C/C++
for( int i = 0; i > 25; ++i )
for( int j = 0; j > 18; ++j )
{
   
    mapaKafelkowa[ i ][ j ].setTexture( mapa_source, false );
    mapaKafelkowa[ i ][ j ].setTextureRect( sf::IntRect( 0, 0, 32, 32 ) );
   
}
 ( Mam nadzieje ze dobrze xD )

 Co do mapa_source:
 Jest to po prostu obraz z teksturkami ( drzewa, trawa, domki itp ).

 Druga linijka petli odpowiada za wyciecie z mapa_source kwadratu ktory ma odpowiadac za kamien.

 Ale problem lezy w wyswitleniu tej tablicy.

Window.draw( mapaKafelkowa );

 Tak sie nie da to oczywiste...
 Probowalem to robic w petli... ale tez nic sie nie pojawialo. Wiec moglby ktos objasnic gdzie lezy blad ?

 Pozdrawiam.
P-72354
kampar
» 2012-12-30 12:07:59
Zamiast tablicy sprite'ów stwórz zwykłego sprite'a i w każdym obiegu pętli po przypisaniu mu odpowiedniego wycinka wyświetlaj go. Pamiętaj żeby nadać mu także odpowiednią pozycję na ekranie. Jeżeli kafelki mapy korzystają tylko z jednej textury, to jej ustawianie możesz dać przed pętlą, albo w konstruktorze klasy (o ile ją masz).
P-72356
Someone.
Temat założony przez niniejszego użytkownika
» 2012-12-30 12:25:18
Nie, nie mam żadnej klasy :)

Popróbuje coś i napisze.

@Edit:

Ehh... jakoś nic nie mogę wykombinować :C Może poczęstujesz jakimś kodzikiem ?
P-72358
kampar
» 2012-12-30 12:53:25
Pseudo kod:
C/C++
sf::Sprite sprite;
sprite.setTexture(...);


for( int i = 0; i < 25; i++ ) //miałeś wcześniej i > 25, to jest błąd
{
    for( int j = 0;...)
    {
        sprite.setTextureRect( 0, 0, 32, 32 ); //operując na 1 i 2 parametrze zmieniasz rodzaj kafelka
        sprite.setPosition( i * 32, j * 32 );
        Window.draw( sprite );
    }
}
P-72361
Someone.
Temat założony przez niniejszego użytkownika
» 2012-12-30 13:40:07
Hahahaha !!! Robiłem to samo :) ( Z tym znakiem w petli to sie potem skaplem )

Tylko po prostu czyszczenie ekranu, dałem za wyświetleniem.
Bo jak jest przed, to ekran jest biały :)

@Edit:

Tylko jeszcze takie pytanko: Jak bym chciał np. zrobić tą mape nie z jednej tekstury ? Tylko np. tu dać drzewko tu dać co innego ?


P-72370
Mrovqa
» 2012-12-30 15:05:52
Dane przechowywane w tablicy (w jedynm elemencie) pakujesz do jakiejś struktury, dodajesz tam jeszcze inne informacje takie jak np. nr. obrazka kafelka czy wskaźnika na sf::Sprite.
P-72375
kampar
» 2012-12-30 15:09:27
tworzysz tablice zawierającą mapę, np:
C/C++
int mapa[ Y ][ X ];

i ją uzupełniasz, np wczytując plik z mapą. Danemu rodzajowi tekstury przydzielasz odpowiedni numer (tak jak to jest po kolei w grafice).
No i potem ustawiasz odpowiedni wycinek na podstawie tej tablicy:
C/C++
sprite.setTextureRect( 0, 0, 32, 32 ); //operując na 1 i 2 parametrze zmieniasz rodzaj kafelka

Gdy wszystkie kafelki w grafice są ułożone w jednym poziomie może to wyglądać mniej więcej tak:
C/C++
sprite.setTextureRect( mapa[ j ][ i ] * 32, 0, 32, 32 );

Gdy jest kilka rzędów musisz pokombinować z dzieleniem i z resztą dzielenia (modulo). Poszukaj w google jest tego masa przykładów.
P-72377
Someone.
Temat założony przez niniejszego użytkownika
» 2012-12-30 18:26:35
Nie ogarniam... :D ( Znaczy to co napisałeś ogarniam, [ no.. w 70% ]. Ale nie wiem jak to na kod przełozyc :) ).

Jakis kod ? ( co i jak ).

( Bede bardzo wdzieczny ).
P-72405
« 1 » 2
  Strona 1 z 2 Następna strona