Tworzenie 'fog of war'
Ostatnio zmodyfikowano 2012-10-30 20:45
Kmicic Temat założony przez niniejszego użytkownika |
» 2012-10-30 15:20:14 Boże to było banalne, zajęło mi jakieś 15 minut 0_0
Ale tak jak się martwiłem gra laguje. W pętli głównej mam pętlę przypisującej do całej mapki 0, potem następuję przypisanie 1 do obszaru tego i tego. Potem w funkcji wyświetlającej pętla przechodzi wszystkie pola, jeśli w tym jest 0 to wstawia bitmape czarną, jeśli nie to odkrywa pole. Ustawiłem żeby sprawdzanie było tylko jakby jednej części mapy w cel sprawdzenia wydajności. Program działał szybko. Teraz głowie się jak robić by ten zakres sprawdzania był w polu widzenia gracza. |
|
SeaMonster131 |
» 2012-10-30 15:55:20 W pętli głównej mam pętlę przypisującej do całej mapki 0, potem następuję przypisanie 1 do obszaru tego i tego. Potem w funkcji wyświetlającej pętla przechodzi wszystkie pola, jeśli w tym jest 0 to wstawia bitmape czarną, jeśli nie to odkrywa pole. Ustawiłem żeby sprawdzanie było tylko jakby jednej części mapy w cel sprawdzenia wydajności. Program działał szybko. Teraz głowie się jak robić by ten zakres sprawdzania był w polu widzenia gracza. |
Nie lepiej przed pętlą główną gry ustawić mapę z mgłą na 0 (czyli jest mgła), następnie zamiast przechodzić przez wszystkie pola, pętla przechodzi tylko przez widoczne pola (więc nawet mając olbrzymią mapę, gra Ci nie zamuli :) i tutaj następuje odsłonięcie danych kafli. |
|
DejaVu |
» 2012-10-30 15:57:59 @up: w dobrym miejscu umieścił kod, ponieważ on chce, aby mapa poza zasięgiem widzenia była zakrywana (tak jak jest w strategiach). |
|
Kmicic Temat założony przez niniejszego użytkownika |
» 2012-10-30 16:47:42 DejaVu słusznie zauważył. Jednak nie umiem sobie poradzić z tym zakresem odświeżania pola widzialnego. Macie jakiś pomysł by zakrywane były tylko pola widoczne na ekranie zamiast całej mapki ? |
|
DejaVu |
» 2012-10-30 17:01:13 Ustaw rozmiar tablicy odpowiedzialnej za rysowanie 'mgły' takiej wielkości jakiej jest ekran (no ciut większy), a następnie pilnuj żeby nie pisać poza zakresem tablicy oraz pilnuj wszelkie przesunięcia mapy tak aby były zsynchronizowane z tym małym buforem mgły. |
|
Kmicic Temat założony przez niniejszego użytkownika |
» 2012-10-30 20:45:12 No właśnie mam ogromny problem z przesuwaniem tej mgły. Mam pętlę w której licznik i oraz j muszą przybierać jakieś wartości od do. Rozegrałem to tak: Zadeklarowałem zmienną tablicową przechowująca wzorki: int warunek[ 3 ]; warunek[ 0 ] = x / 25 - 3; warunek[ 1 ] = x / 25 + 4; warunek[ 2 ] = y / 25 - 3; warunek[ 3 ] = y / 25 + 3;
zerowanie całej bitmapy for( int i = 0; i <= 159; i++ ) for( int j = 0; j <= 159; j++ ) { FOG_information[ i ][ j ] = 0; }
i fragment odkryty for( int i = warunek[ 0 ]; i <= warunek[ 1 ]; i++ ) for( int j = warunek[ 2 ]; j <= warunek[ 3 ]; j++ ) { FOG_information[ i ][ j ] = 1; }
Potem wyświetlam for( int i = 0; i <= 159; i++ ) for( int j = 0; j <= 159; j++ ) { if( FOG_information[ j ][ i ] == 1 ) al_draw_bitmap( image[ 1 ], j * 25, i * 25, NULL ); if( FOG_information[ j ][ i ] == 0 ) al_draw_bitmap( image[ 2 ], j * 25, i * 25, NULL ); }
Element który spowalnia program jest wyświetlanie bitmapy. Czyli powinienem wyświetlać tylko bitmapę z zakresu widoczności. Poczatkowo zaczyna się tak że ten zakres wynosił by od 0-40 for( int i = 0; i <= 40; i++ ) for( int j = 0; j <= 40; j++ )
Przy każdym ruchu muszę proporcjonalnie zwiększyć zakres i oraz j. Czyli może to być np. że jeśli poruszę się w lewo i y postaci zmniejszy się o 1 to w pętli też zmieniam ten zakres na -1 - 39 ? Nie umiem tego rozkminić. |
|
1 « 2 » |