[Algorytm] AutoTile |
Autor |
Wiadomość |
Cootje
Legenda
Pomógł: 35 razy Posty: 644
18047 Prestiż
|
Wysłany: 11-09-2013, 01:07 [Algorytm] AutoTile
|
|
|
Witam,
Chciałbym przedstawić sposób na stworzenie AutoTile - metody używanej w wielu edytorach map bardzo przydatnej i przyśpieszającej maping naszych gier.
Istnieje wiele różnych algorytmów przykładowo dla podłoży jak w RPG Maker lub dla samych ścian, ale ja przedstawię uniwersalny sposób nadający się do tworzenia map dla gier z widokiem z góry jak i platformówek.
Algorytm:
Kod: |
1.0 Ustaw badany klocek na ostatnio postawiony.
1.1 Dla badanego klocka zlicz sąsiadów ustawiając odpowiednio 8 flag (0 - pole puste, 1 - pole pełne).
1.2 Podczas liczenia jeśli napotkamy sąsiadujący klocek, który nie był jeszcze sprawdzony i jest sąsiadem ostatnio postanowionego
wracamy do punktu 1.1
1.2.1 Jeśli napotkamy sąsiada ustawiamy flage na 1 jeśli nie to na 0. ( sąsiad 1 flaga1, sąsiad 2 lfaga2 itd... )
1.3 Po skończeniu zliczania sąsiadów ustawiamy danemu klockowi animacje według jego flag po czym zerujemy flagi. |
Wizualizacja:
Na fioletowo zaznaczono aktualnie badany klocek.
Schemat flag jeśli pierwsza oznacza klocka badanego po lewej i dalej kierując się w kierunku wskazówek zegara:
00000000 =
1?0?0?0? =
0?1?0?0? =
0?0?1?0? =
0?0?0?1? =
0?1?0?1? =
1?0?1?0? =
10101010 =
11111111 =
1?1?0?0? =
0?1?1?0? =
0?0?1?1? =
1?0?0?1? =
0?1?1?1? =
1?0?1?1? =
1?1?0?1? =
1?1?1?0? =
0?11111? =
0?0?111? =
1?0?1111 =
1?0?0?11 =
111?0?11 =
111?0?0? =
11111?0? =
0?111?0? =
0?11101? =
0?10111? =
1?0?1110 =
1?0?1011 =
101?0?11 =
111?0?10 =
11101?0? =
10111?0? =
11101110 =
10111011 =
10101110 =
10101011 =
11101010 =
10111010 =
11101011 =
11111010 =
10111110 =
10101111 =
11111011 =
11111110 =
10111111 =
11101111 =
|
_________________ Mój klucz publiczny PGP |
|
|
|
|
Fadex
Legenda #4; #12; #18; #20; #21; #27
Pojedynki: nie
Pomógł: 105 razy Posty: 1773
51612 Prestiż
|
Wysłany: 11-09-2013, 01:37
|
|
|
No... Dijkstra to to nie jest, ale prosty i skuteczny algorytm
Zakodzenie tego zaoszczędza sporo czasu, powiem od razu że układanie tak kafelków w edytorze poziomów to głupota. W Twoim poście znajduje się wszystko poza... opisaniem co właściwie pokazujesz więc może dopowiem:
Oczywiście jest to sposób ustawienia klocków tak by pasowały do sąsiadujących graficznie. Najlepiej jest to zrobić prostym algorytmem, gdyż ustawianie tego ręcznie nie ma sensu. Do tego algorytmu bardzo przydaje się kolejka, a z implementacją jej w klikach może być różnie zależnie od tego jakiej struktury do tego użyjemy - no ale cóż, to nie c++
PS: Tak w ogóle to czy nie ma jakiegoś rozszerzenia obsługującego kolejkę (albo lepiej całą strukturę dekową - wraz ze stosem, mieszaniem i sortowaniem)? Bo w sumie byłoby to dość przydatne w implementacji wieeelu algorytmów. |
_________________ If it doesn't have to work, I can optimize any code to a runtime of zero. What's your superpower?
wat |
|
|
|
|
Cootje
Legenda
Pomógł: 35 razy Posty: 644
18047 Prestiż
|
Wysłany: 11-09-2013, 01:58
|
|
|
Ja użyłem tylko Map object (Zastępstwo array do przechowywania planszy), jednego activa z grafikami i kolejnego jako wskaźnik myszy, a reszta to sprytne użycie pętli odpalanej 1 raz w MMF2.
Dla osób, które nie radzą sobie z pętlami w MMF2 jest jeszcze Queque Object, choć nie wiem jak działa bo nie miałem okazji używać. |
_________________ Mój klucz publiczny PGP |
|
|
|
|
Fadex
Legenda #4; #12; #18; #20; #21; #27
Pojedynki: nie
Pomógł: 105 razy Posty: 1773
51612 Prestiż
|
Wysłany: 11-09-2013, 11:38
|
|
|
Aaaa. To z pętli zrobiłeś sobie taki stos systemowy. W sumie dobry pomysł |
_________________ If it doesn't have to work, I can optimize any code to a runtime of zero. What's your superpower?
wat |
|
|
|
|
Cootje
Legenda
Pomógł: 35 razy Posty: 644
18047 Prestiż
|
|
|
|
|
|