Ich habe eine Frage bezüglich Universal-Spiel Vermögen und absolute Positionierung eines SKNodes
in Sprite Kit
(iOS 8+).Universal-2D-Spiel Assets und Absolute Knoten Positionierung
Ich werde versuchen, mein Problem durch ein Beispiel zu präsentieren, wie folgt:
Stellen Sie sich ein 2D-Top-down-Spiel mit einem SKSpriteNode
, die ein Haus darstellt. Ein Haus hat mehrere Kinder SKSpriteNode
s, die Stühle, Schreibtisch, Sofa stellen usw.
Ich habe 3 Versionen von Haus Asset:
1x - 200 x 200px
(Non-Retina-iPads),2x - 400 x 400px
(Retina iPhones und iPads),3x - 600 x 600px
(iPhone 6 plus).
Wichtige: Kinderknoten (Stühle, Schreibtisch, etc.) Positionen in einer .plist-Datei definiert werden. Etwa wie folgt (JSON-Darstellung):
children: [
{
position = {20,20};
},
...
]
Da die Position in Punkten und nicht in Bildpunkten definiert ist, alles wie erwartet nach Gerätebildschirm Skala positioniert wird. Für 1x
Geräte bleibt die Position {20,20}
, für 2x
Position {40,40}
und für 3x
ist die Position ist {60,60}
.
Problem:
Das Problem ist, dass 200x200px
und 400x400px
Vermögenswerte Weg zu klein für iPad-Geräte sind, um ähnlichen Look zu erzielen und auf allen Geräten fühlen.
Frage:
Wie present/Import Vermögenswerte in einer Art und Weise, um erfolgreich die mir ähnlich zu erreichen (wenn nicht gleich) aussehen und sich anfühlen auf allen Geräte/Bildschirmgrößen ermöglichen würde, ohne zu brechen Kinderknotenpositionierung?
Mein nimmt:
Take 1:
ich einfach die vorhandenen 400x400px
Vermögen auf Nicht-Retina iPad-Geräte und 600x600px
Vermögen auf Retina iPad-Geräte für den Haus Knoten verwenden könnte aber Die Positionierung eines Kindes Knoten würde gebrochen werden. Dies liegt daran, dass der Wert Kind Position nicht und noch {20,20}
und {40,40}
für iPad-Geräte würde sich ändern, würde jeweils, während das Vermögen größer sein würde.Dies würde ungenaue Kindpositionen relativ zum Hausknoten ergeben.
Take 2:
ich auch den SKScene
Größe (Zoom-Effekt) skalieren kann, während der normalen 200x200px
und 400x400px
großen Vermögen für iPad-Geräte jeweils mit. Dies funktioniert und hält die Positionierung der Kindknoten aufrecht, aber die wiedergegebene Qualität der Szene/des Assets ist nicht so gut, wie es sein sollte. Auch das fühlt sich an wie ein Hack und das wollen wir nicht.
Take 3:
Ich könnte auch doppelt so groß Vermögen für Geräte iPad verwenden und das Doppel Kind-Knoten an der Laufzeitposition. In diesem Fall würde ich ein 400x400px
Asset für nicht-Retina iPad-Geräte und ein neues 800x800px
Asset für Retina-iPad-Geräte verwenden. Während dies sieht gut aus und hält das Kind Knoten Positionierung arbeiten, scheint es wie eine wirklich große Hack Fixierung während der Laufzeit mit diesem Kind Knotenposition:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
position.x *= 2.0f;
position.y *= 2.0f;
}
Danke, dass Sie sich die Zeit nehmen, die Frage zu lesen!
Irgendwann müssen Sie zusätzlichen Code hinzufügen, um Ihre App universal zu machen und einen Multiplikator zu verwenden, wie Sie in # 3 vorschlagen, ist der beste Weg zu gehen. – sangony
ja, einfach verwenden 3. das ist im Wesentlichen, wie alle Vid-Spiele funktionieren. Es gibt absolut kein Problem, wenn Sie "sinnlos zu hohe Res" Sprites auf den "unteren Res" -Bildschirmen verwenden. – Fattie
Ich habe eine ähnliche Prämie beantwortet, aber es ging nicht um iPad. Sie können es nützlich finden http://stackoverflow.com/a/29269507/851041 –