Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML 2.6.2] Auto-Tiled - Program do rysowania mapy

Ostatnio zmodyfikowano 2025-08-05 06:48
Autor Wiadomość
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
P-182834
pekfos
» 2025-08-04 16:43:10
Po pierwsze, co to jest? To jest intencjonalne?
C/C++
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:
  • jeżeli masz tam 2 różne typy terenów X, Y, gdzie X<Y, to para (X, Y) jest kluczem identyfikującym tileset z przejściami między X i Y,
  • Jeżeli masz 1 typ terenu, to pełny kafel typu X, masz w dowolnym tilesecie z X, możesz przyjąć Y dowolne inne, na przykład Y=(X+1) mod N (przy założeniu ciągłej numeracji od 0) i ewentualnie zamień X i Y by zachować X < Y.
  • Jeżeli więcej niż 2, to błąd. Oznacz jakoś w widoczny sposób by użytkownik tego nie przeoczył i poprawił.
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.
P-182838
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ć...
P-182846
1 2 3 4 5 6 7 « 8 »
Poprzednia strona Strona 8 z 8