Ukrywanie mapy za ścianą
Ostatnio zmodyfikowano 2012-08-27 21:13
draculeq Temat założony przez niniejszego użytkownika |
Ukrywanie mapy za ścianą » 2012-08-27 19:51:15 Witam, mam problem w "grze" z obliczeniem czy coś na mapie (tablica 2D) znajduje się za ścianą.
Chodzi mi o to żeby w "widoku" z góry Gracz nie widział co ma za ścianą.
Próbowałem rekurencyjnie przeszukać linie od gracza do każdego pola (coś a-la quicksort lewa,prawa i srodek i tak aż lewa=srodek...) ale poległem za bardzo to rozbudowałem...
Jest na to jakiś szybki sposób? Na google jestem za głupi bo nie umiem sprecyzowac odpowiednio pytania. |
|
m4tx |
» 2012-08-27 19:59:08 Najprostszym sposobem będzie tu chyba 4 pętle (na X i Y) "wychodzące" od pozycji gracza i sprawdzające, gdzie jest ściana i ustawiające bloki za nią jako niewyświetlane. Coś takiego:
.................. <= to już nie będzie .................. <= wyświetlane ################## <= ściana ........P......... .......PXP........ <= X - gracz, P - kierunki ........P......... <= działania pętli
:)
To jest najprostszy możliwy sposób, do tego dochodzą różne inne rzeczy, m.in. perspektywa. |
|
waxx |
» 2012-08-27 20:54:35 well, sciana nie musi obejmowac calosci szerokosci/wysokosci mapy wiec zawszse mozna przerzucic to na petle prostokata zaczynajacego sie od postaci idacego za sciane + sprawdzanie dodatkowo kolizja linia wzroku vs prostokat kawalka sciany |
|
draculeq Temat założony przez niniejszego użytkownika |
» 2012-08-27 21:13:43 Dzięki.
Po wywaleniu i napisaniu na nowo działa.
Dla potomnych leniwców którzy tu trafią
int cPlansza::Rekurencja_Cien( int LewaX, int LewaY, int PrawaX, int PrawaY, int deep ) { double doubleSrodekX = LewaX -( LewaX - PrawaX ) / 2, doubleSrodekY = LewaY -( LewaY - PrawaY ) / 2; int SrodekX = doubleSrodekX, SrodekY = doubleSrodekY; if( PrawaX == LewaX && PrawaY == LewaY ) return 0; if( Cienie[ SrodekY ][ SrodekX ] == 2 ) return 1; if( deep > 5 ) { return 0; } if( Rekurencja_Cien( LewaX, LewaY, SrodekX, SrodekY, deep + 1 ) == 1 ) return 1; if( doubleSrodekX - SrodekX == 0 ) { if( doubleSrodekY - SrodekY == 0 ) { if( Rekurencja_Cien( SrodekX, SrodekY, PrawaX, PrawaY, deep + 1 ) == 1 ) return 1; } else { if( Rekurencja_Cien( SrodekX, SrodekY + 1, PrawaX, PrawaY, deep + 1 ) == 1 ) return 1; } } else { if( doubleSrodekY - SrodekY == 0 ) { if( Rekurencja_Cien( SrodekX, SrodekY, PrawaX, PrawaY, deep + 1 ) == 1 ) return 1; } else { if( Rekurencja_Cien( SrodekX + 1, SrodekY + 1, PrawaX, PrawaY, deep + 1 ) == 1 ) return 1; } } return 0; }
|
|
« 1 » |