ograniczające proporcje elementów GUI w Spritekit gry
góry przepraszam z powodu ogromnego postu, ale wszyscy, którzy kiedykolwiek próbowali jakąś uniwersalną aplikacją wie, że jest to dość problematyczne rzeczy, więc proszę być łatwo na me ...
celem
Co staram się osiągnąć (pokazany na powyższym zdjęciu) jest użycie @ 2x aktywów zarówno iPhone 5 i 6, i utrzymać ten sam wygląd aplikacji. I jeśli to możliwe, aby to zrobić bez ręcznego obliczania właściwości skali i położenia węzłów na podstawie wykrytego urządzenia ... Krótko mówiąc, w jaki sposób osiągnąć tę aplikację automatycznie ograniczać proporcje elementów (i sceny)? Chciałbym mieć taki sam wygląd aplikacji na iPhone 6+ przy użyciu zasobów @ 3x, ale ze względu na prostotę skoncentrowałem się tylko na iPhonie 5 i 6.
Co znalazłem w sieci to, że niektórzy ludzie mówiąc, że to (próbkowanie) odbywa się automatycznie przez iOS, na przykład sugerują to:
„Make @ 2x aktywów w rozmiarze dla iPhone 6, a następnie iOS zrobi downscaling automatycznie dla iPhone 5”.
Ale to oczywiście nie jest prawda, jeśli chodzi o scenę Spritekit, lub czegoś brakuje.
Problem
Chociaż iPhone 6 i iPhone 5 ma ten sam format i tę samą PPI, przy użyciu tego samego zasobu nie będą wyglądać tak samo w stosunku do wielkości sceny (menu wygląd ikonki na 1 i 2 obraz w porównaniu z rozmiarem sceny), ponieważ PPI są powiązane z gęstością pikseli, a iPhone 6 ma więcej miejsca (większa przekątna, więcej cali), co oznacza, że ma więcej pikseli niż iPhone 5. I tu właśnie pojawia się mój problem, a ja nie wiem, Wiesz, jaki byłby skuteczny sposób radzenia sobie z tym.
co zrobiłem do tej pory
Drugi obraz nie jest problemem dla GUI, ale na gry, w moim przypadku jest to, bo chcę sam wygląd i na różnych urządzeniach. Wystarczy spojrzeć na pierwszy i trzeci obraz.
Dzięki sugestii udało mi się uzyskać taki sam wygląd aplikacji na wszystkich urządzeniach iPhone 5 w systemach 7.1 lub 8.1, a także na iPhonie 6. Problem polega więc na tym, jak dostosować ten kod do działa z iPhone 6+ przy użyciu tekstur @ 3x, a także na iPhone'ach 4s. Oto rozwiązanie dla iPhone 5 i 6:
Zobacz controller.m
GameScene *scene = [GameScene sceneWithSize:CGSizeMake(375,677)];//fixed instead of view.bounds.size
scene.scaleMode = SKSceneScaleModeAspectFill;
Więc scena zawsze stałym rozmiarze w iPhone 6 wymiarów i rozmiar zmienia się w zależności od urządzenia. Korzystam z katalogu zasobów dla obrazów uruchamiania, a nie z pliku xib. Zdjęcia mają rozmiar zalecany - 640x960px dla 4s, 640x1136px dla 5, 750x1334px dla 6 i 1242x2208 dla modelu 6+. Zasoby mają rozmiar dla iPhone'a 6, więc dla tego modelu nie ma żadnego skalowania.
Powiązany z modelem 4s, kiedy używam tej metody opisanej powyżej, są dwa czarne paski z każdej strony ...
Do tej pory testowałem to tylko na symulatorze i urządzeniu iPhone 6 (to, co widzę wygląda jak na pierwszym obrazie na urządzeniu lub symulatorze).
Pytanie
Na razie, jak powiedziałem, wszystko działa na iPhone 4s (z dwoma czarnymi pasami z powodu różnych proporcjach), 5, 6, stosując @ 2x aktywów, ale jak zrobić wszystko, aby pracować z iPhone 6 + używając zasobów @ 3x? Jeśli używam 375x667 wymiary na scenie, to wszystko jest ustawione prawidłowo i ma dobre proporcje, ale jakość cierpi (ze względu na skalowanie @ 2x)
Czy kiedykolwiek próbowałeś skalować węzeł na podstawie urządzenia, kiedy go po raz pierwszy dodajesz? Każda kolejna animacja (zmiany tekstury) będzie miała ustawiony wstępnie ustawiony współczynnik skali. – sangony
Pewnie, i tego właśnie staram się unikać, jeśli to możliwe, ale z pewnością jest to jedna z możliwości poradzenia sobie z tym. Po prostu znajduję łatwiejsze/automatyczne rozwiązanie, które pozwoli mi zaoszczędzić wiele obliczeń/ręczne ustawienie właściwości skali na podstawie urządzenia itp. – Whirlwind
Czy w ogóle skalujesz swoją scenę, czy też scena i widok mają takie same rozmiary (np. Brak skalowania). –