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

Tworzenie 'fog of war'

Ostatnio zmodyfikowano 2012-10-30 20:45
Autor Wiadomość
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.
P-67982
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.
P-67983
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).
P-67984
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 ?
P-67987
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.
P-67988
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:
C/C++
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
C/C++
for( int i = 0; i <= 159; i++ )
for( int j = 0; j <= 159; j++ )
{
    FOG_information[ i ][ j ] = 0;
}
i fragment odkryty
C/C++
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
C/C++
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
C/C++
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ć.
P-68019
1 « 2 »
Poprzednia strona Strona 2 z 2