W przypadku arkusza o niejednolitych wymiarach, w jaki sposób mogę uzyskać prostokąty ograniczające dla każdego pojedynczego duszka (tj. Niebieskie pola na poniższym obrazku / narysowałem tylko kilka przykładów)?
Chciałbym ustalić, co następuje: offset_x, offset_y, width, height
Do tej pory korzystałem tylko z arkuszy sprite, w których wszystkie sprite mają identyczne wymiary. W takim przypadku wystarczy określić przesunięcie xiy, aby uzyskać określony duszek. Jednak w przypadku arkuszy o niejednolitych wymiarach to nie działa.
EDYCJA: Po zapoznaniu się z komentarzami i odpowiedziami sformułowałem moje pytanie, aby uczynić je bardziej włączającym. rzeczywisty proces korzystania z arkusza sprite w grze. Wcześniej pytanie zawierało informacje o tym, dlaczego ludzie produkują arkusze sprite o niejednorodnych wymiarach i jak sobie z tym poradzić.
Odpowiedzi:
Większość arkuszy sprite o nieidentycznych wymiarach zwykle zawiera pewien rodzaj metadanych, w których znajduje się kotwica sprite. Istnieje wiele narzędzi, które wykonują takie czynności, jak usuwanie pełnych pikseli alfa i dostarczanie potrzebnych danych, aby dane te nie były generowane ręcznie.
Jeśli nie masz tych metadanych, musisz je samodzielnie utworzyć. Najdokładniejszym sposobem jest ten, który wypowiedziałeś w swoim pytaniu, czyli po prostu zrobić to ręcznie. Może to chwilę potrwać, ale prawdopodobnie jest szybsze niż tworzenie nowych duszków.
źródło
+1
. Dostarczenie metadanych duszkom gwarantuje, że rozwiąże je w sposób rozsądny .Możesz przeprowadzić analizę obrazu, aby zlokalizować obwiedni prostokąty każdego duszka, posortować te obwiednie prostokąty (być może przez zwiększenie minimum X, a następnie Y), a otrzymasz zestaw obszarów granicznych, które odpowiadają ramkom arkusza duszka.
Ponieważ ten proces może być stosunkowo drogi, prawdopodobnie będziesz chciał zrobić to offline, na przykład w ramach procesu kompilacji gry. Następnie można serializować informacje o regionie granicznym do pliku przechowywanego z odpowiednim obrazem arkusza ikon. W czasie wykonywania ładujesz zarówno obraz, jak i plik definicji granicy i masz informacje potrzebne do uzyskania dostępu do każdego indywidualnego duszka.
Łatwiej jednak powiedzieć niż zrobić. Zasadniczo będziesz chciał zrobić wykrywanie funkcji, a konkretnie wykrywanie kropel, które są problemami z widzeniem maszynowym. Możesz także ustawić próg obrazu (do czerni i bieli) i zastosować technikę wykrywania krawędzi . Odpowiednia matematyka za tymi technikami jest wyjaśniona na tych linkach znacznie lepiej niż ja, a w przypadku, gdy nie masz ochoty samodzielnie wdrażać tej matematyki, dostępnych jest kilka bibliotek, które mogą ci pomóc. Najbardziej obiecujący był następujący zestaw linków:
źródło
Zrobiłem własne narzędzie do tego rodzaju niejednorodnego arkusza sprite. Umożliwia edycję odsunięć itp. Oto zrzut ekranu z pomysłem:
źródło
Sprawdź texturepacker
http://www.texturepacker.com/
Wysyła taki plik (w zależności od preferowanych ustawień)
Korzystając z tych danych, możesz łatwo pobrać oddzielne prostokąty z obrazu.
źródło
spritebuddy.com działa dla mnie świetnie. Nie mogłem znaleźć żadnej pomocy w samej witrynie, ale ten post w Grupach dyskusyjnych Google bardzo dobrze to wyjaśnia. Automatycznie zgaduje granice dla twoich duszków, pozwala ci to dostosować, ORAZ pozwala ci ułożyć je w sekwencje animacji. Następnie wyrzuca plik metadanych dla tego wszystkiego w JSON lub XML. Następnie wystarczy przeanalizować ten plik danych w grze, aby uzyskać prawidłowe prostokąty ograniczające.
źródło