Takie tam.
Zastanawiam się…
Obiekt który ma ciało fizyczne + sprite (skrzynka, gracz, ściana), ma dwa dane kształty:
- Kształt ciała fizycznego
- pozwalamy na dowolne wierzchołki
- Kształt obrazka który go reprezentuje
- w przypadku sprita prostokąt - bo to po prostu obrazek
- ale mamy też support dla renderowania dowolnych, oteksturowanych wielokątów
W większości przypadków powyższe dwa będą się pokrywały, np. prosta kwadratowa skrzynka albo prostokątna ściana.
Jeśli jednak obiekt będzie nieregularny, powiedzmy skrzynka z uchwytami na brzegach, to chcemy dać jej odrobinę mniejsze ciało fizyczne by gracz lepiej “dotykał” ten obiekt.
Wtedy mamy dwie różniące się dane.
Problem: najeżdżanie myszką, zaznaczanie obiektów i snapowanie do grida.
- Jeśli obiekt jest tylko niefizyczną dekoracją, to nie ma problemu, zawsze zaznaczamy/snapujemy tylko kształt obrazkowej reprezentacji tej dekoracji.
- Np. podłoga, napis.
- Jeśli obiekt jest fizyczny i ma obrazkową reprezentację (skrzynia, ściana), to zawsze zaznaczamy/snapujemy kształt fizyczny, ponieważ on jest… ważniejszy.
- A już szczególnie przy snapowaniu do grida.
- Problem: jeśli ciało fizyczne jest mniejsze od obrazka, to mimo że myszka będzie już trochę nad obrazkiem, to najechanie myszką nie zostanie wykryte.
- Trzeba najechać wewnątrz ciała fizycznego.
- To na razie nie będzie tragedią (nie będzie często się zdarzać), a poprawienie tego teraz będzie dla mnie ogromnym bólem w dupie
- Przyszłe rozwiązanie: jeśli ciało fizyczne nie pokrywa się z obrazkiem, to dodatkowo nad obrazkiem rysujemy przerywaną linię tam gdzie jest ciało fizyczne, aby było widać gdzie trzeba najechać myszą
Problem: edycja jednego lub drugiego kształtu
v
- tryb ogólnej edycji kształtu:- Dla niefizycznej dekoracji która jest obrazkiem - nie robimy nic.
- Nie będziemy zmieniać rozmiaru obrazka bo to nie ma sensu z pixelartami.
- Dla niefizycznej dekoracji która jest wielokątem - modyfikujemy ten wielokąt.
- Nawet jeśli to będzie pixel-art, można ustawić takie koordynaty uv dla tesktury, aby obrazek nie był rozciągnięty, tylko po prostu pocięty wierzchołkami obiektu.
- Dla fizycznego obiektu którego obrazkową reprezentacją jest sprite, a więc zwykły obrazek, edytuje kształt jego fizycznej reprezentacji.
- Nadal nie pozwala na modyfikację obrazka!
- Dla fizycznego obiektu którego obrazkową reprezentacją jest wielokąt (np. nieregularna ściana jaskinii), edytuje kształt jego obrazkowej reprezentacji, ale…
- …każde przeciągnięcie wierzchołka albo rozciągnięcie rozmiaru - automatycznie uaktualnia kształt fizyczny, aby się zgadzał z nowym kształtem obrazkowej reprezentacji.
- Podobnie jak z niefizycznymi dekoracjami, możemy na to nałożyć pixel-art w rozmiarze 1:1.
- Dla niefizycznej dekoracji która jest obrazkiem - nie robimy nic.
Przykładowy workflow, 1
- Wrzucamy nowego entita który jest trójkątną paką ze spritem 32x32.
- Generowane jest domyślne ciało fizyczne - prostokąt 32x32.
- Wciskamy
v
i przeciągamy myszką wierzchołki aby kształt ciała fizycznego zgadzał się z tym co jest na obrazku. - Wciskamy
v
jeszcze żeby wyjść - zrobione.- Obrazek pozostał nietknięty.
- Nie ma sensu powiększać albo pomniejszać zwykłego obrazka - będą to pixel-arty.
- Obrazek pozostał nietknięty.
Przykładowy workflow, 2
- Wrzucamy nowego entita który jest interaktywnym obiektem ze spritem 32x32.
- Generowane jest domyślne ciało fizyczne - prostokąt 32x32.
- Wciskamy
v
i zmniejszamy trochę rozmiar ciała fizycznego (np. klawiszami - oraz + które pozwolą na dokładną zmianę o konkretną ilość pikseli)- Teraz gracz lepiej się będzie dotykał z tym obiektem.
- Wciskamy
v
jeszcze żeby wyjść - zrobione.- Obrazek pozostał nietknięty.
- Nie ma sensu powiększać albo pomniejszać zwykłego obrazka - będą to pixel-arty.
- Obrazek pozostał nietknięty.
Przykładowy workflow, 3
- Wrzucamy nowego entita o typie “wielokątne ciało” które ma teksturę ściany nieregularnej jaskinii, 256x256.
- Chcemy zrobić coś takiego:
- Chcemy zrobić coś takiego:
- Zaczynamy od prostokąta o rozmiarze źródłowego obrazka.
- Wciskamy
v
i modyfikujemy wierzchołki tego wielokąta - tworzymy jaskinię.- Z każdym poruszeniem, dodaniem, usunięciem wierzchołka, ciało fizyczne aktualizuje się aby się pokrywało 1:1 z wielokątem który będzie renderowany.
- Dla takiego wielokąta nie ma sensu, aby ciało fizyczne nie zgadzało się w 1:1 z obrazkową reprezentacją.
- Z każdym poruszeniem, dodaniem, usunięciem wierzchołka, ciało fizyczne aktualizuje się aby się pokrywało 1:1 z wielokątem który będzie renderowany.
- Mamy opcję aby zmapować obrazek na wierzchołki tak, aby został nałożony w rozmiarze 1:1 - gdyby to miał być pixel-art.
- Wciskamy
v
jeszcze raz żeby wyjść - zrobione.