|
|
[TGF]Mapa jak w Heroes ! Help |
Autor |
Wiadomość |
Kodarth
Sierżant
Główny edytor:
Pojedynki: być może
Posty: 141
3319 Prestiż
|
Wysłany: 30-10-2005, 11:30 [TGF]Mapa jak w Heroes ! Help
|
|
|
W Heroes jest taka plansza (mapa) że na początku jest czarna i wiecie... jak się bohater porusza to odkrywa nowy ląd... da się takie coś zrobić w TGF ?
Wicie o co mi chodzi ?
Help !! |
|
|
|
|
Minty
Stwórczyni omc dr fizyki
Główny edytor:
Drugi edytor:
Pojedynki: być może
Pomogła: 259 razy Posty: 3446
33789 Prestiż
|
Wysłany: 30-10-2005, 18:03
|
|
|
Możesz użyć obiektów aktywnych (nie polecam), albo zwyczajnie ograniczyć poruszanie kamerą tak, żeby nie dało się wjechać w nieodkryte miejsce |
|
|
|
|
Omenski
Starszy kapral
Pomógł: 2 razy Posty: 40
1019 Prestiż
|
Wysłany: 11-11-2005, 14:23
|
|
|
Oczywiście, że takie coś da się zrobić w TGFie. Da się zrobić nawet więcej - efekt "fog of war" znany głównie z RTSów (efekt terenu z ukrytymi szczegółami). Jeżeli planszę można podzielić na reguralne kształty, np. prostokąty czy kwadraty to rzecz jest dosyć znośna do zrobienia. Polecałbym wtedy rozszerzenia Dynamic Array i Fast Loop.
Jeśli bym miał polecać jakieś rozwiązanie, to mogę przedstawić swoje ulubione dla tego problemu:
Najpierw założenia:
Teren planszy da się podzielić siatką na takie same kształty (np. prostokąty, kwadraty - na nich się najwygodniej operuje).
Wymagane tablice:
TablicaWidocznościTerenu - zapisuje czy teren jest widziany przez gracza czy nie (można tu także zrobić czy teren był widoczny przez gracza jakiś czas temu i jeszcze kto co lubi).
TablicaTerenu - w niej znajduje się wygląd podłoża (dodatkowo za jej pomocą musimy mieć zdefiniowane czy dane podłoże jest przeszkodą czy czymś innym).
Mogą przydać się też inne tablice, ale to nie jest aż tak bardzo konieczne, np. TablicaObiektów zapisująca ich pozycje XY.
Rozwiązanie:
Wiemy, że każda jednostka ma pole widzenia, należy zatem przy każdym jej ruchu sprawdzać dla niej, które pola terenu widzi (chodzi o te zapisywane w tablicy).
Jak to zrobić:
Jeżeli jednostka przekroczyła granicę dwóch pól (rozumianych w sensie zapisu w tablicy), to uruchom algorytm ustawiania pola widoczności.
Najprostszy algorytm ustawiania widoczności dla jednej jednostki (pole widoczności jest kwadratem):
/* klikowiec instrukcje powinien rozumieć następująco:
for - uruchom pętlę nr jakiś tam
if - jeżeli (tj. jakiś warunek w zdarzeniu)
Wartość1 = Wartość 2 - wartość 1 ustaw na wartość 2
&& - i (czyli warunek 1 jest spełniony i warunek 2 jest spełniony itd.)
*/
// sprawdź teren będący kwadratem (r - promień widoczności)
for (i=0;i<=2r;i++)
for (j=0;j<=2r;j++)
{
// XSpr, YSpr - współrzędne obecnie sprawdzanego pola
Xspr = Jednostka.X - i - r;
Yspr = Jednostka.Y - j - r;
// sprawdzane pole w tablicy istnieje
if ( Xspr>= 0 && XSpr < RozmiarMapyX && YSpr >= 0 && YSpr < RozmiarMapyY)
// jeśli to pole zaistniało, to oznacz je jako widoczne, np. przez wartość =1
TablicaWidocznościTerenu[Yspr][XSpr]=1;
/* w przypadku użycia tablicy jednowymiarowej: TablicaWidocznościTerenu[Yspr*RozmiarMapyX + XSpr ] =1
*/
}
To był algorytm widoczności dla pola będącego kwadratem o boku równym 2r+1.
Jeśli ma być używany scrolling to przy każdym przewinięciu ekranu trzeba będzie odświeżać na ekranie, które pola mają być pokazywane.
A robi się to tak (przedstawiam prostsze rozwiązania):
// Objaśnienie używanych nazw poniżej algorytmu
for (i=0;i<EX;i++)
for (j=0;j<EY;j++)
{
XSpr = XScroll + i;
YSpr = YScroll + j;
Ustaw pozycje "klocka rysującego" na pozycję X = (RKX * i), Y = (RKY*j)
Jeśli TablicaWidocznościTerenu[YSpr][XSpr] = 1 ustaw animacje i kierunek animacji "klocka rysującego" by przedstawiał widoczny teren na pozycji XSpr, YSpr
Jeśli TablicaWidocznościTerenu[YSpr][XSpr] = 0 ustaw animacje i kierunek animacji "klocka rysującego" by przedstawiał teren niewidziany (np. czarna kratka)
Wklej "klocek rysujący do tła" jako (jeśli może to być tło i nietło to będzie potrzebny do tego co najmniej jeszcze 1 warunek)
}
Objaśnienie:
"klocek rysujący" - obiekt aktywny (może być niewidoczny), który ma zapisany w sobie wszystkie wyglądy poszczególnych kawałków tła.
EX- liczba pól po X, którą możemy wyświetlić na ekranie
EY- liczba pól po Y, którą możemy wyświetlić na ekranie
RKX - długość X "klocka rysującego"
RKY - długość Y "klocka rysującego"
XScroll - przesunięcie po X (poziome) licząc w kratkach planszy
YScroll - przesunięcie po X (poziome) licząc w kratkach planszy
Uwaga:
Da się zauważyć, że ten algorytm rysuje planszę począwszy od górnego-lewego rogu. Można to jednak w bardzo prosty sposób zmienić.
Ufff!
Starczy tego, jeśli uda Ci się to zrozumieć, to jeśli trzeba będzie jeszcze coś dorobić, to sobie juz poradzisz. |
|
|
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum
|
Dodaj temat do Ulubionych Wersja do druku
|
|