2016-07-27 26 views
2

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.

Antwort

1

Lassen Sie mich stoppen :)

ich Ihre Schwierigkeiten zu verstehen, das ist nicht der richtige Weg, um ein Spiel für unterschiedliche Bildschirmgrößen zu bauen.

Sie sollten Ihr Spiel nur an die Scene denken.

Dann GameViewController.swift öffnen und suchen Sie nach dieser Zeile

scene.scaleMode = .AspectFill 

Diese Linie, die Sie erlaubt zu definieren, wie eine Szene in einem Bildschirm dargestellt werden soll (und es ist besonders wichtig, wenn mit unterschiedlichen Bildschirmgrößen zu tun).

Sie haben 4 Optionen

  • .Fill: die SKScene Skalieren des gesamten SKView zu füllen.
  • .AspectFill: Skalieren Sie die SKScene, um die SKView zu füllen und dabei das Seitenverhältnis der Szene beizubehalten.Ein Beschneiden kann auftreten, wenn die Ansicht ein anderes Seitenverhältnis aufweist.
  • .AspectFit: Skalieren Sie die SKScene so, dass sie in die SKView passt, während das Bildseitenverhältnis beibehalten wird. Einige Letterboxing kann auftreten, wenn die Ansicht ein anderes Seitenverhältnis hat.
  • .ResizeFill: Ändern Sie die tatsächliche Größe des SKScene, um exakt mit dem SKView übereinzustimmen.
+0

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

+0

@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? –

+0

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