[SFML 2.6.2] Auto-Tiled - Program do rysowania mapy
Ostatnio zmodyfikowano 2025-08-05 06:48
tBane Temat założony przez niniejszego użytkownika |
» 2025-08-04 00:44:34 Wiem. Ale chciałbym, by tak działał ten program. Wtedy mógłbym w wygodny sposób dodawać nowe rodzaje kafelków i było, by widać który zestaw został użyty |
|
pekfos |
» 2025-08-04 16:43:10 Po pierwsze, co to jest? To jest intencjonalne? if( ttype == terrain_types[ y * size.x + x ] == 0 ) Jeśli rozważasz przejścia między 2 terenami naraz maksymalnie, to ja bym to zrobił tak*: Przypisz każdemu typowi terenu unikalny numer - i tak to masz bo jakoś definiujesz pola mapy. Patrząc na sąsiedztwo 2x2:
Na potrzeby wyliczenia współrzędnej w teksturze, liczysz tak jak teraz, przy czym przyjmujesz że X to 0, a Y to 1. Więc przykładowo: woda=0, piasek=1, trawa=2, jeżeli masz przejście woda-piasek, to do obliczeń zakładasz że piasek to 1. Dla przejścia piasek-trawa, piasek to 0. Żeby nie przerabiać tekstur, możesz wskazać per tileset że te oznaczenia są zamienione by dostosować się do grafik które już masz. *- to przy założeniu że używasz takich grafik jakie masz teraz. Bo od zera, to ja bym to zrobił tak że masz 1 tileset z pełnymi kaflami (sama woda, piasek, etc). Numer terenu przekłada się bezpośrednio na pozycję w tilesecie. Tego tilesetu możesz użyć do prostego renderowania mapy bez przejść gdzie pola mapy to kafle. Taki widok może być przydatny do edycji (gdy renderujesz poprawnie tylko poprawne przejścia, to użytkownik poprawia błędne na ślepo). Tilesety z przejściami to wtedy same przejścia, więc nie ma przypadku 0000 i 1111. Indeks wyliczony jest tak samo, ale odejmujesz 1 by wszystko przesunąć do zakresu 0-13. Jeżeli dla kombinacji terenów nie ma tekstury, to przejścia można generować proceduralnie. To co masz teraz narysowane w tych teksturach jest proste do osiągnięcia. Przy tym podziale w pierwszej kolejności dbasz o to by bazowe kafle dobrze wyglądały, a potem gdzie to najbardziej potrzebne dodajesz ręcznie robione przejścia. |
|
tBane Temat założony przez niniejszego użytkownika |
» 2025-08-05 06:46:06 Po pierwsze, co to jest? To jest intencjonalne? if( ttype == terrain_types[ y * size.x + x ] == 0 ) Bez tego niestety nie chce działać. Nie rozumiem dlaczego, ale tak działa dla "wody i piasku". Nie do końca w ogóle rozumiem ten algorytm, dlatego piszę jeszcze inne programy, by się podszkolić... |
|
1 2 3 4 5 6 7 « 8 » |