Zeitlabel oben anheften

M

ma2412

Aktives Mitglied
Thread Starter
Dabei seit
17.03.2013
Beiträge
770
Reaktionspunkte
188
Hallo Leute,

ev. kann mir da bitte jemand einen Tipp geben:
Ich habe emit SpritKit einen Level gebastelt, wo sich die Kamera mit dem Spieler mitbewegt. Das Level ist größer als der sichtbare Bereich. Das klappt alles soweit.

Jetzt möchte ich (via Code mit SKLabelNode) ein Label erstellen, welches mir den Countdown anzeigt:
Standardmäßig scrollt das Label mit, weil fixe Position -> schlecht
wenn ich dem Label die Position der Camera gebe (nur bei Y: + 100 oder so), dann bleibt das Label stehen, was gut ist, jedoch ist bei jedem Device Abstand anders in Relation zum sichtbaren Screen (beim iPhone 5S ist das Label dann woanders zu sehen als beim iPhone 8) -> schlecht
habe schon mit "self.view?.frame.size.width" versucht, die sichtbare Höhe (Landscape-Modus) zu erfassen, aber das differiert ebenfalls bei den verschiedenen Devices.
(Habe den Anchorpoint so gesetzt, dass 0/0 in der Mitte des Screens ist.)

Frage:
wie kann ich das Label so positionieren, dass ich es oben mittig angezeigt bekomme und es dann nicht mitscrollt, da der Level selbst ja größer als der sichtbare Bereich ist?
Ich bräuchte einen Wert, der praktisch "oben mittig" für jedes Device richtig berechnet, um dann zB. mit "-30" das Label knapp darunter platzieren zu können.

ich dachte, dass "self.view?.frame.size.width" nur der sichtbare Bereich ist, aber das kann IMO auch nicht ganz stimmen.
Einfügen möchte ich den Code in der GameScene.swift.

ich habe auch versucht, das Label als Child der Kamera zu positionieren, aber da die Kamera mittig ist, brauche ich trotzdem die Pixel zum oberen Rand (je nach Device), um relativ zur Kamera zu positionieren.

ein Ausschnitt auf dem Code:
Code:
static var scoreLabel = SKLabelNode()

       // Kamera einrichten
        addChild(GameScene.cameraNode)
        camera = GameScene.cameraNode
        GameScene.cameraNode.position.x = GameScene.player.position.x
        GameScene.cameraNode.position.y = GameScene.player.position.y
    
        // Zeitlabel bei Kamera anhängen
        GameScene.cameraNode.addChild(GameScene.scoreLabel)
        GameScene.scoreLabel.position = CGPoint(x: 0, y: 100)
mit dem Code scrollt es nicht mehr mit, aber es wird bei jedem Device in der Höhe anders positioniert. Darum muss ich rausfinden, wie ich das (bei jedem Device) ganz oben in der Mitte positionieren kann.

Ich hoffe, dass mir jemand einen Tipp geben kann - danke!

*edit*
Code:
           print(self.view!.bounds.width)
            print(self.view!.bounds.height)
            print(self.frame.size.width)
            print(self.frame.size.height)
            print(UIScreen.main.bounds.size.width)
            print(UIScreen.main.bounds.size.height)
ergibt bei mir am iPhone7:
667.0
375.0
667.0
375.0
750.0
1334.0

und am iPhone 5S (Simulator):
568.0
320.0
568.0
320.0
750.0
1334.0

d.h. mit UIScreen.main.bounds bekomme ich scheinbar die gleichen Werte für jedes Gerät, oder?
mal sehen, ob ich die als Position für SKLabelNode nehmen kann...

... kann man nicht wirklich.
wenn ich bei Y nun "UIScreen.main.bounds.size.width / 4 - 50" nehme, dann wird trotzdem noch verschieden angezeigt.
Muss ich / kann ich das irgendwie umrechnen?

btw: ist das bei UIScreen "Points" und keine Pixel? was ist die Einheit bei den anderen?

*edit2*
erledigt:
self.frame.size.width / 4 - 5
war das Richtige
 
Zuletzt bearbeitet:
Zurück
Oben Unten