Ich erstelle meine erste Swift + SpriteKit-Spiel, und ich habe mit diesen Kopfschmerzen der Größe alle meine Sachen abhängig von der iDevice.Wie genau messen Größe und Position der Swift-Knoten abhängig von iDevice
Ich habe eine Klasse, die basierend auf dem Gerät läuft, gibt den Namen zurück. Mit diesem Namen erstellte ich ein Wörterbuch, das basierend auf einem Gerät String-Name die Auflösung des angegebenen Geräts zurückgibt.
Und dann habe ich zwei Funktionen -> getSizeBasedOnDevice() und getPositionBasedOnDevice()
Da ich mein Spiel für ein iPhone 6S codiert. Ich dachte, es wäre so einfach wie eine einfache mathematische Berechnung, um alle diese Größen und Positionen zu bekommen, aber es sieht so aus, als wäre es nicht.
Das sind meine Funktionen:
func getSizeBasedOnDevice(width: CGFloat, height: CGFloat) -> CGSize {
// iPhone 6s w: 375, h: 667
let deviceName = UIDevice.currentDevice().modelName
let iphoneNative = ScreenSize(width: 375, height: 667)
let resolution = Resolutions[deviceName]
let newWidth = (CGFloat(resolution!.getWidth()) * width)/iphoneNative.getWidth()
let newHeight = (CGFloat(resolution!.getHeight()) * height)/iphoneNative.getHeight()
return CGSize(width: newWidth, height: newHeight)
}
func getPositionBasedOnDevice(x: CGFloat, y: CGFloat) -> CGPoint {
let deviceName = UIDevice.currentDevice().modelName
let iphoneNative = ScreenSize(width: 375, height: 667)
let resolution = Resolutions[deviceName]
let newX = (CGFloat(resolution!.getWidth()) * x)/iphoneNative.getWidth()
let newY = (CGFloat(resolution!.getHeight()) * y)/iphoneNative.getHeight()
return CGPoint(x: newX, y: newY)
}
Meine iPhoneNative Höhe und Breite würde mein iPhone 6S‘sein. So war die Berechnung für mich irgendwie einfach, aber es war nicht.
So haben diese Beispielwerte:
Asset's width = 100 pts
Current Device (iPhone 4S) width = 320 pts
Originally designed Device (iPhone 6S) width = 375 pts
Die Mathematik wäre:
(320 * 100)/375 = 85,33
So ist der Vermögenswert, der eine 100 hatte Punkte Breite auf meinem iPhone 6S hätte 85,33 Breite auf einem iPhone 4S.
Zuerst dachte ich, das wäre in Ordnung, aber wenn ich mir die Ergebnisse ansehe, sehe ich, dass ich es falsch mache.
Kann mir jemand einen Tipp geben?
Vielen Dank im Voraus.
Dank für die Antwort :) Ich habe versucht .. verschiedene scaleModes Einstellung ... Ich habe .AspectFill zur Zeit, aber fast alle von ihnen getestet ... und ich immer wieder die gleichen Ergebnisse zu sehen .. wissen Sie, Warum kann das vorkommen? – msqar
@msqar: '.AspectFill' könnte einige Teile deiner Szene ausschneiden, füllt aber den Bildschirm. Es ist, als ob man einen Breitbildfilm auf einen alten 3/4 Fernseher sieht, wo die Seitenbalken beschnitten sind (oder eine 3/4 alte Star Trek TV-Episode auf einem modernen Widescreen mit aktiviertem Zoom ansehen: die oberen und unteren Balken sind beschnitten). Nach welcher Art von Repräsentation suchen Sie? Was ist das Problem, das Sie beheben möchten? –
Um zu beginnen, das Hauptmenü zum Beispiel, wo ich ein paar Tasten mit bestimmten Animationen, 3 Tasten für WETTBEWERB, Praxis und Optionen und dann Mini-Tasten für verschiedene Dinge einschließlich Facebook & Twitter-Konten. Damit du dir vorstellen kannst, was ich sehe ... kann ich sehen, dass alles die gleiche Größe wie mein iPhone 6S hat, aber in einer 4S Auflösung .. du kannst dir vorstellen, wie durcheinander alles ist, ich kann nicht einmal die kleinen Knöpfe unter OPTIONS sehen Schaltfläche aufgrund meines Werbebanners auf der Unterseite. – msqar