NukeBoards - Kreatywność przede wszystkim
FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  DownloadDownload
RejestracjaRejestracja  ZalogujZaloguj

Odpowiedz do tematu
Poprzedni temat :: Następny temat
[TGF]Mapa jak w Heroes ! Help
Autor Wiadomość
Kodarth 
Sierżant


Główny edytor: MMF2 Dev
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: Fusion 2.5 Dev
Drugi edytor: Construct
Pojedynki: być może
Pomogła: 259 razy
Posty: 3445

33730 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.
 
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
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

Skocz do:  

PSK Cytaty Klikibaza - kopia wszystkich klików Klikipedia - encyklopedia o tworzeniu gier Discord KlikCzat Zaproszenie
Daj piniondza Wielkie Muzeum Klikowe

Powered by phpBB modified by Przemo © 2003 phpBB Group