[SFML] View - stałe tło + renderowanie tylko spriteów które są widoczne w View.
Ostatnio zmodyfikowano 2014-03-16 22:19
Pokropow |
» 2014-03-16 20:25:41 skoro to jest mapa kafelkowa to zamiast funkcji czy_w_polu_view możesz chyba zastosować następujący trick: przeliczasz lokalizację View (a konkretnie jego lewy górny róg) na współrzędne z mapy kafelkowej dla przykładu załóżmy że View "Patrzy" na lokalizację [5][4] w mapie kafelkowej Wtedy rysujesz obiekty które znajdują się pomiędzy tą lokalizacją, a prawym dolnym rogiem np: int wielkosc_kafelka = TUTAJ WIELKOSC KAFELKA; sf::Vector2f pos = sf::Vector2f( view.getCenter().x - view.getSize().x / 2, view.getCenter().y - view.getSize().y / 2 ); sf::Vector2f pos_w_mapie = sf::Vector2f( pos.x / wielkosc_kafelka, pos.y / wielkosc_kafelka ); sf::Vector2f wielkosc_view_w_coordach_mapy = sf::Vector2f( view.getSize.x / wielkosc_kafelka, view.getSize.y / wielkosc_kafelka );
for( int i = pos.x; i < wielkosc_view_w_coordach_mapy.x + pos.x; i++ ) for( int j = pos.y; j < wielkosc_view_w_coordach_mapy.y + pos.y; j++ )
EDIT myślę że taka wersja będzie działać znacznie szybciej niezależnie od wielkości mapy (nawet jakbyś dał miliard kafelków, ale wtedy chyba pamięć zamuli) |
|
OczkoSX Temat założony przez niniejszego użytkownika |
» 2014-03-16 21:20:09 Nie rozumiem do końca twojego rozumowania. Przepisałem kod żywcem zmieniając tylko nazwy zmiennych i nie trybi ;< Co ma reprezentować zmienna "i" i "j" ? Jak je użyje jak w poprzedniej funkcji rysowania to wywala errora związanego z brakiem dostępu chyba do obszaru pamięci. Dokładny error: Unhandled exception at 0x012FC737 in Sfml.exe: 0xC0000005: Access violation reading location 0xFFFFFCAE. |
|
Pokropow |
» 2014-03-16 21:51:30 generalnie chodziło mi o to że kamera wypisuje tylko te kafelki które widzi. i i j to miejsce w tablicy, a ta pętla powinna być w funkcji rys_mape() jeżeli nie działa to nie wiem dlaczego |
|
OczkoSX Temat założony przez niniejszego użytkownika |
» 2014-03-16 21:59:27 Możesz napisać funkcję rys_mape na podst. poprzedniej? Abym mógł skompilować i sprawdzić |
|
Pokropow |
» 2014-03-16 22:06:49 Miałem na myśli coś takiego: void rys_mape() { int wielkosc_kafelka = bloki.blok_szer; sf::Vector2f pos = sf::Vector2f( view.getCenter().x - view.getSize().x / 2, view.getCenter().y - view.getSize().y / 2 ); sf::Vector2f pos_w_mapie = sf::Vector2f( pos.x / wielkosc_kafelka, pos.y / wielkosc_kafelka ); sf::Vector2f wielkosc_view_w_coordach_mapy = sf::Vector2f( view.getSize.x / wielkosc_kafelka, view.getSize.y / wielkosc_kafelka ); for( int i = pos.x; i < wielkosc_view_w_coordach_mapy.x + pos.x; i++ ) { for( int j = pos.y; j < wielkosc_view_w_coordach_mapy.y + pos.y; j++ ) { bloki.blok[ mapa_kaf.mapa_tab[ i ][ j ] ].setPosition( sf::Vector2f( j * bloki.blok_szer, i * bloki.blok_wys ) ); if( mapa_kaf.mapa_tab[ i ][ j ] != - 1 && czy_w_polu_View( i, j ) ) APP.draw( bloki.blok[ mapa_kaf.mapa_tab[ i ][ j ] ] ); } } }
chyba powinno działać |
|
Pokropow |
» 2014-03-16 22:08:41 Jakbyś mógł wrzucić całe aktualne źródło, bo już się trochę mylę co gdzie. do tego mam pytanie - czym to kompilujesz? |
|
OczkoSX Temat założony przez niniejszego użytkownika |
» 2014-03-16 22:19:46 Jutro ci podam może linka do zipa z projektem\ plikami. Jestem na telefonie teraz i nic za bardzo nie zrobię. Visual 2013 express
// Zamykam. Na razie dobrze działa i nie będę nic ruszał :D |
|
1 « 2 » |