Почему мой SKLabelNode уходит со страницы, если оценка увеличивается

Итак, у меня есть SKLabelNode, который отображает высокий балл пользователей, когда максимальный балл пользователей равен, например, 5, позиция меток не находится в том же положении, где она была бы, если бы оценка была, например, 35 или 100 заставляет метку идти за пределами экрана, пожалуйста, может кто-нибудь помочь с этой проблемой, есть ли способ заставить метку оставаться на том же месте, если изменится высокий балл? нужно ли накладывать ограничения на метку? Кстати, это в наборе спрайтов и использовании swiftЯрлык рекорда не отображается на экране

Ярлык рекорда не совпадает с другим изображением


person Andrew Harris    schedule 25.01.2016    source источник


Ответы (2)


Вы хотите использовать SKLabelNodeHorizontalAlignmentMode.Left вот так:

class GameScene: SKScene {

    var label = SKLabelNode(fontNamed: "ArialMT")

    var score: Int = 0 {
        didSet {
            label.text = "Score: \(score)"
        }
    }

    override func didMoveToView(view: SKView) {


        label.fontSize = 24
        label.text = "Score: \(score)"

        //Place the label in upper left corner of the screen
        label.position = CGPoint(x: 50, y: CGRectGetMaxY(frame)-50)

        //Add this
        label.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.Left

        addChild(label)
    }

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {

        score+=5
    }
}

Результат:

режим выравнивания по левому краю

person Whirlwind    schedule 25.01.2016
comment
спасибо за ответ, однако использование вашей позиции приводит к тому, что метка полностью исчезает с представления, а добавление horizontalAlignmentMode.Left оставляет только конец метки в представлении. Я пытался использовать .Right, но это также отключает метку от представления. Чтобы было ясно, это мой код метки Highscore - - person Andrew Harris; 26.01.2016
comment
позиция раньше была - .position = CGPoint(x: self.frame.width / 2 + 60, y: self.frame.height / 2 + 335) - person Andrew Harris; 26.01.2016
comment
Конечно, вы должны соответствующим образом изменить положение своей этикетки. Просто сдвиньте метку немного вправо. - person Whirlwind; 26.01.2016
comment
так что ваша позиция устанавливает позицию в левом верхнем углу, почему тогда метка не отображается? - person Andrew Harris; 26.01.2016
comment
@AndrewHarris Нет проблем, рад слышать, что это работает! Если этот ответ помог вам решить проблему, отметьте его как принятый. - person Whirlwind; 26.01.2016
comment
Привет @Whirlwind, как я могу получить CGRectGetMaxY? - person Sky; 30.06.2020

Я бы попробовал изменить привязку узла с (0,5, 0,5), которая используется по умолчанию, на (0, 0). Это означает, что узел теперь будет «привязан» к верхнему левому углу, а не к середине.

РЕДАКТИРОВАТЬ: (0, 0) в SpriteKit ВНИЗУ СЛЕВА. Используйте (0, 1) вместо TOP LEFT!

person kevchoi    schedule 25.01.2016
comment
Спасибо за быстрый ответ! Я новичок в SKLabelNodes, как мне добавить этот anchorPoint в метку? - person Andrew Harris; 25.01.2016
comment
единственная проблема в том, что SKLabelNode не имеет члена anchorPoint - person Andrew Harris; 25.01.2016
comment
Упс - прости за это! Вы правы, и другой ответ правильный :) - person kevchoi; 26.01.2016