Zeitlabel oben anheften

Diskutiere das Thema Zeitlabel oben anheften im Forum App Entwickler für iOS. Hallo Leute, ev. kann mir da bitte jemand einen Tipp geben: Ich habe emit SpritKit einen Level...

Schlagworte:
  1. ma2412

    ma2412 Thread Starter Mitglied

    Beiträge:
    517
    Zustimmungen:
    112
    Mitglied seit:
    17.03.2013
    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
     
  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite weitersurfst, akzeptierst du unseren Einsatz von Cookies. Akzeptieren Weitere Informationen...