2017-01-02 6 views
3

In meiner App stelle ich für einen Bildschirm die Größe und Zentrierung des Hintergrunds eines SpriteKit-Knotens ein. Zum Beispiel, ich bin die Größe des Hintergrund subview Einstellung wie folge:Wie kann ich die Größe von SpriteKit-Knoten in Swift ändern?

backgroundNode.size = self.frame.size 

Während dies auf die iPhone 6 Plus arbeitet, den kleineren Bildschirm/niedrige Auflösung der iPhone 5 bedeutet den Standard Die Größe der anderen Knoten ist zu groß, um in ihre Szene zu passen.

Wie kann ich andere Knoten zwingen, die der Größe des Hintergrundknotens entsprechen? Ich wollte die Größe jeder Unteransicht durch die Größe der Hintergrund-Unteransicht teilen, aber mathematische Operationen können nicht direkt auf der Eigenschaft size ausgeführt werden.

Antwort

4

SpriteKit Szenen (SKScene) enthalten Knoten, Knoten (SKNode), die size und position Eigenschaften (des Typs CGSize und CGPoint bezeichnet) aufweisen. Ähnlich in iOS ist die UIViewframe Eigenschaft ein CGRect Objekt, das CGSize und Objekte umfasst. So hilft es wirklich zu verstehen, wie man mit CGSize und CGPoint arbeitet.

Der Grund SKNode Größe und Position sind Klassen wie einfache C structs mit mehreren Feldern aufgebaut ist, weil sie „Verbindungstypen“ sind, das heißt, sie jeweils mehrere Werte enthalten. Zum Beispiel enthält CGSizewidth und height Eigenschaften, und CGPoint besteht aus x und y Eigenschaften.

Daher sind zusätzliche Schritte zum Zugriff auf die Eigenschaften erforderlich, wenn Sie die Größe und Position eines Knotens anpassen möchten (oder für eine UIView über die Eigenschaft frame).

Wenn Sie die Größe aufteilen möchten, müssen Sie die width und height Eigenschaften der CGSize Klasse zugreifen einzeln.

Eine Möglichkeit, es zu tun ist, um die Größe in einem Vorgang zugeordnet werden:

node.size = CGSize(width: node.size.width/backgroundNode.size.width, 
    height: node.size.height/backgroundNode.size.height) 

Oder Sie könnten diese stattdessen tun:

node.size.width = node.size.width/backgroundNode.size.width 
node.size.height = node.size.height/backgroundNode.size.height 
+0

Sie sir ist eine frieking Legende !! ich versuche es gerade jetzt! –

+0

Wie effektiv ist das? Ich fühle mich wie die Größe und Position mit dem Hintergrund oder dem Knoten dahinter zu basieren scheint so perfekt, aber ich möchte seine Grenzen bewusst sein –

+0

Ein bisschen außerhalb des Umfangs der Frage. Ich habe lediglich gezeigt, * wie * ich es tun soll, nicht beraten, ob es getan werden sollte oder wird deine Sprites richtig dimensionieren. Ich glaube nicht, dass die Teilung richtig ist, denn je größer der Hintergrund, desto kleiner der Knoten. Sie müssen entscheiden, welchen Effekt Sie wollen, was Sie priorisieren sollen. Ich frage mich, ob Sie * wirklich * Sprites mit der Bildschirmgröße skalieren lassen wollen. Könnte besser sein, ihre Größe relativ zum Auge konstant zu halten und ihnen mehr Platz zu geben, um sich auf größeren iPhones zu bewegen. – clearlight

Verwandte Themen