Autor Wątek: Edytor Map 2d generowanie poziomu górnego - dopasowywanie tilesów.  (Przeczytany 2777 razy)

Offline Adam B

  • Użytkownik

# Listopad 25, 2015, 10:28:53
Hej,

Rozwijam sobie powoli i pomału projekt Gierki 2d - aktualnie pracuje nad edytorem:
http://supertowerdefence.pl/Editor.php

Z prawego menu trzeba wybrać grafikę 'gcc01.png"lub 'gcc02.png", żeby malować mapę - inne grafiki nie działają.

Znalazłem grafiki do generowania map 2d, oto link do obrazka gdzie są zaprezentowane (potem wrzucę na mojego FTP i podmienię żeby link nie wygasł i żeby grafika była w lepszej jakości):

link: http://supertowerdefence.pl/tailset_prezentacja.png



Na grafice jedynkami zaznaczyłem poziom wysoki, dwójkami poziom niski. Na podstawie jedynek i dwójek chce dopasowywać tilesy w edytorze. Zakładam, że w grze grafiki terenu będą wielkości jednego kafelka - edytor je potnie jeszcze odpowiednio..


Jestem teraz na etapie generowania "poziomu wysokiego", czyli highground'a.

Problem jaki mam:
Tilesy są tak zaprojektowane, ze nie mogą za ich pomocą narysować dowolnego kształtu " highground'a". - tego problemu nie ma przy generowaniu trawy i drogi.

Jak powinienem podejść do problemu?
1. Tilesy są złe i potrzebuje takich, którymi dam rade obrysować dowolny kształt?
2. W logice rysowania  "highground'a" uwzględnić to jakie mam tilesy i edytor ma pozwalać na rysowanie tylko takich kształtów "highground'a", które będą dobrze wyglądać?
3. Rozwiązanie jest zupełnie inne ?

Pozdrawiam,
Adam

Edit1:

Podminilem obrazek na taki w wysokiej rozdzielczosci.
« Ostatnia zmiana: Listopad 26, 2015, 10:03:24 wysłana przez Adam B »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Kyroaku

  • Użytkownik

# Listopad 25, 2015, 13:44:24
Coś dziwnego się tu dzieje, bo ten kwadracik, którym się rysuje (ten żółty), nie pasuje do siatki. Raz jego krawędzie pokrywają się z krawędziami mapy, a raz nie, w zależności od położenia "kamery".

Offline Adam B

  • Użytkownik

# Listopad 25, 2015, 18:40:26
Tak faktycznie jest to bug - "zółty kafelek" nie uwzględnia dobrze przesunięcia mapy/viewportu.


Offline Adam B

  • Użytkownik

# Listopad 29, 2015, 22:23:45
Częściowo poradziłem sobie z problemem jednak mam pewne wątpliwości więc zadam inne pytanie:

Czy jak budujemy mapę z kafelków czy jedne kafelki mogą być większe od innych ? Czy jednak powinno się trzymać zasady, ze wszystkie kafelki na mapie są tych samych rozmiarów?

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

  • +1
# Listopad 30, 2015, 00:12:46
Czy jak budujemy mapę z kafelków czy jedne kafelki mogą być większe od innych ? Czy jednak powinno się trzymać zasady, ze wszystkie kafelki na mapie są tych samych rozmiarów?
Jak piszesz własną grę, to nie ma żadnych zasad. :)

Offline Adam B

  • Użytkownik

# Grudzień 01, 2015, 10:10:43
Przed narysowaniem konkretnej grafiki sprawdzam sąsiadujące z nią typy pól - podobnie jak to narysowałem na rysunku w pierwszym wpisie tematu.

Na teraz można rysować tylko górki, docelowo z lewego menu ma się dać wybrać typ terenu do rysowania.
W rysowaniu górek są jeszcze błędy - wynika to z tego, że nie mam wystarczającej ilości grafik więc będę musiał dodać logikę do "pędzla terenu" lub dorysować sobie kilka grafik :)))))

Pierwszy efekt można sprawdzić tutaj:
http://supertowerdefence.pl/Editor.php

TODO:
Po wykonaniu wyżej wymienionych zadań przyjdzie czas na grafikę drogi i wody + mostu.


PRZEMYŚLENIE:
1) Bez "mieszania/przenikania/półprzezroczystości" grafik dodawanie kolejnych typów terenu jest MEGA! czasochłonne, ponieważ trzeba dodawać wszystkie typy łączenia się terenu, a przyrost potrzebnych grafik jest geometryczny :(

Jak piszesz własną grę, to nie ma żadnych zasad. :)
2) Kiedy niektóre grafiki są większe niż standardowy kafelek trudność sprawia optymalizacja widoku mapy tak aby rysował faktycznie tylko to co ma być narysowane. U mnie przy scrollowaniu mapy widać ze na krawędziach canvasa znikają grafiki górek..

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Grudzień 01, 2015, 11:18:06
Cytuj
2) Kiedy niektóre grafiki są większe niż standardowy kafelek trudność sprawia optymalizacja widoku mapy tak aby rysował faktycznie tylko to co ma być narysowane.
Trudność... po prostu trzeba zwiększyć zakres rysowania lub użyć innego algorytmu do określania widocznych grafik (np. quad-tree).

Offline wezu

  • Użytkownik

# Grudzień 01, 2015, 13:26:30
Nie lubię się wcinać jak nie mam nic do dodania... ale warto pomyśleć nad nazwą. Wiem, że ludziom z C++ std kojarzy się inaczej, ale dla reszty świata STD to sexually transmitted disease

Offline Adam B

  • Użytkownik

# Styczeń 26, 2016, 22:58:35
Przemyślałem temat i wydaje mi się, że odpowiednim podejściem będzie tutaj informacja w modelu mapy zawierająca następujące informacje.

Kafelek będzie wiedział jakie obiekty graficzne do niego należą (nachodzą na niego) zarówno te, które mogą się poruszać jak i te, które nie mogą się poruszać.
Podczas renderowania kafelka system renderujący będzie sprawdzał listę obiektów, które na niego nachodzą i renderowal.
Element, który znajduje się niżej na ekranie będzie renderowany później.


W czasie ruchu jednostek/obiektu trzeba tylko aktualizować kafelki, do których jednostki należą.


Nie wiem tylko na ile dobre i wydajne będzie takie rozwiązanie bo gdy np. będę chciał poruszyć milionem elementów nawet poza ekranem to sam proces aktualizacji/przypisywania kafelków może być drogi.. Ale nie wiem czy jest jakieś inne dużo lepsze rozwiązanie ??

Offline jarou

  • Użytkownik

# Styczeń 27, 2016, 19:54:42
Nie wiem tylko na ile dobre i wydajne będzie takie rozwiązanie bo gdy np. będę chciał poruszyć milionem elementów nawet poza ekranem to sam proces aktualizacji/przypisywania kafelków może być drogi..
Piszesz symulator mrowiska, czy Chińskiej Armii Ludowej?;) Bardziej niż dodawania referencji do komórek mapy obawiałbym się znajdowania ścieżek i wykrywania kolizji dla tylu obiektów.

Offline Adam B

  • Użytkownik

# Styczeń 27, 2016, 21:38:28
W sumie racja.. nawet elementy, które są poza viewportem musza mieć liczone kolizje co jest "100 razy" bardziej kosztowne..