Sie müssen prüfen, wie SKScene funktioniert:
Dies die Overlay Größe des iPhone-Bildschirm für die gegebene Orientierung gesetzt bedeutet: sceneView.overlaySKScene = SKScene(size: sceneView.frame.size)
Jetzt habe ich nichts andere Änderungen ginge davon aus, so dass Mittel Ihr scaleMode
ist auf .fill
eingestellt, was bedeutet, dass die Grafiken streckbar sind, bis alle Seiten ausgefüllt sind.
Wenn Sie im Hochformat sitzen, werden Sie nichts bemerken, weil es im Maßstab 1: 1 ist.
Jetzt kippen Sie es in die Landschaft.
Das System wird versuchen, Ihre Hochformat-Bildschirmgröße in eine Querformatgröße zu konvertieren.
Dies bedeutet, dass Sie Fett Stubby Grafiken bekommen, weil es Ihre Seiten ausstrecken wird, und verkleinern Sie Ihre oberen und unteren Rand, um alle Kanten zu füllen.
Dies ist der Grund, warum Code wie sceneView.overlaySKScene = SKScene(size: sceneView.frame.size)
schlecht ist. Du wirst am Ende verwirrt sein.
ich immer empfehlen, entweder eine SKS-Datei oder eine konstante Szenengröße einstellen, so sceneView.overlaySKScene = SKScene(size: CGSize(750,1334))
Dann, je nachdem, wie ich mochte, dass mein Overlay angezeigt werden, ich habe den richtigen Maßstab Modus verwenden.
In Spielen, in denen ich das Overlay will den genauen Prozentsatz des Platzes auf dem Bildschirm nehmen, verwende ich .aspectFill
In Spielen, in denen ich das Overlay will die genaue Höhe des Pixelraumes aufzunehmen, verwende ich .resizeFill
Mit Blick auf die scaleMode
, weiß ich jetzt, wie meine Szene verhalten soll.
Mit , ich werde erkennen müssen, wenn die Orientierung umgedreht wurde, und zu diesem Zeitpunkt entweder die SKS entsprechend der Ausrichtung präsentieren, oder Knoten entsprechend der Ausrichtung verschieben.
Mit .resizeFill
muss ich eine Methode zur Größenänderung erstellen, die bei der Ausrichtung der Ausrichtung beachtet wird, und die Knoten proportional zur neuen Größe verschieben.
Sie können erkennen, wenn Ausrichtung Flips in der ViewController
mit
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator)
dann die Ansicht verwenden, um die Szene zu bekommen Resize-Funktion aufrufen/eine neue Szene laden.