Как я могу поставить ярлык монеты в углу каждого устройства в моем универсальном приложении?
Я хочу создать SKLabelNode, который находится в верхнем левом углу каждого устройства. Кроме того, слева от метки в верхнем левом углу я хочу, чтобы изображение, представляющее собой монету, показывало, что это текущая метка подсчета монет. Каждый раз, когда я размещаю свой ярлык в углу на моем iPhone 6s +, он не в углу на моем iPad.
Вот мой код до сих пор:
cornerCoin.position = CGPoint(x: screenWidth / -3.1, y: screenHeight / 3.175)
cornerCoin.zPosition = 10
cameraNode.addChild(cornerCoin)
coinLabel.position = CGPoint(x: screenWidth / -2.4, y: screenHeight / 8)
coinLabel.zPosition = 1
coinLabel.fontSize = 50
coinLabel.fontColor = UIColor.black
coinLabel.fontName = "04b19"
cameraNode.addChild(coinLabel)
1 ответ
Лично я бы не отслеживал screenWidth/screenHeight, для начала он идет вразрез с основой SpriteKit (ваша сцена ведет себя как ваш виртуальный экран, именно так вы должны обрабатывать все внутри него) Вместо этого вам нужно конвертировать из экран сцены, таким образом, независимо от режима масштабирования или точки привязки, ваш ярлык, где вы хотите быть.
Чтобы преобразовать верхний правый угол вашего обзора в вашу сцену, вы делаете
if let view = scene.view
{
let topRightPos = view.convert(CGPoint(x:view.frame.maxX,y:view.frame.minY),to:scene)
let camTopRight = scene.convert(topRightPos,to:cameraNode)
}
Теперь мы знаем, где находится наша верхняя правая позиция:
Мы можем
if let view = scene.view
{
let topRightPos = view.convert(CGPoint(x:view.frame.maxX,y:view.frame.minY),to:scene)
let camTopRight = scene.convert(topRightPos,to:cameraNode)
coinLabel.position = camTopRight
coinLabel.zPosition = 1
coinLabel.fontSize = 50
coinLabel.fontColor = UIColor.black
coinLabel.fontName = "04b19"
coinLabel.horizontalAlighmentMode = .right
coinLabel.verticalAlighmentMode = .top
cameraNode.addChild(coinLabel)
}
выровнять наш ярлык вправо так, чтобы текст всегда расширялся влево, а затем, чтобы добавить монету, мы делаем:
if let view = scene.view
{
let topRightPos = view.convert(CGPoint(x:view.frame.maxX,y:view.frame.minY),to:scene)
let camTopRight = scene.convert(topRightPos,to:cameraNode)
coinLabel.position = camTopRight
coinLabel.zPosition = 1
coinLabel.fontSize = 50
coinLabel.fontColor = UIColor.black
coinLabel.fontName = "04b19"
coinLabel.horizontalAlighmentMode = .right
coinLabel.verticalAlighmentMode = .top
cameraNode.addChild(coinLabel)
cornerCoin.position = CGGPoint(x:0.0,y:coinLabel.frame.midY)
cornerCoin.anchorPoint = CGPoint(x:1.0,y:0.5)
cornerCoin.zPosition = 10
cameraNode.addChild(cornerCoin)
}
Наш ярлык должен теперь находиться в верхнем правом положении нашей камеры, а монета должна быть слева от нашего ярлыка по центру вертикально с текстом.
Возможно, вы захотите поиграть с позицией вашего лейбла, если вам не нравится внешний вид выравнивания по верху.