Начальная точка CGRect в SpriteKit
Я пытаюсь расположить текст в центре сцены определенного размера.
func addCubeExperienceLabel(_ buttonSize : CGSize, _ buttonPos : CGPoint, _ world : Int) {
let price = SKLabelNode(fontNamed: "LCDSolid")
price.text = String(WorldPrices.fromInt(world).rawValue)
price.zPosition = 50
adjustLabelFontSizeToFitRect(labelNode: price, rect: CGRect(origin: CGPoint(x: 0, y: 0), size : buttonSize))
self.addChild(price)
}
Поэтому я использую AdjustLabelFontSizeToFitRect:
adjustLabelFontSizeToFitRect(labelNode: price, rect: CGRect(origin: CGPoint(x: 0, y: 0), size : buttonSize))
Чтобы настроить размер SKNodeLabel для определенного размера. Но я хочу, чтобы источник этой метки был центром экрана, поэтому (0,0), поскольку точка привязки равна 0,5, 0,5. Тем не менее, я получаю это:
AdjustLabelFontSizeToFitRect() это:
func adjustLabelFontSizeToFitRect(labelNode:SKLabelNode, rect:CGRect) {
// Determine the font scaling factor that should let the label text fit in the given rectangle.
let scalingFactor = min(rect.width / labelNode.frame.width, rect.height / labelNode.frame.height)
// Change the fontSize.
labelNode.fontSize *= scalingFactor
// Optionally move the SKLabelNode to the center of the rectangle.
labelNode.position = CGPoint(x: rect.midX, y: rect.midY - labelNode.frame.height / 2.0)
}
1 ответ
Посмотрите на horizontalAlignmentMode
и verticalAlignmentMode
SKLabelNode. Это своего рода "точка привязки" для надписей и может использоваться для регулировки горизонтального и вертикального положения текста в SKLabelNode.
По умолчанию, verticalAlignmentMode
установлен на.baseline, и horizontalAlignmentMode
установлен на.center. Таким образом, "происхождение" не совсем в (центре, центре) этикетки.
Не знаю, является ли это эффектом, который вы ищете, но если вы хотите, чтобы метка была в центре сцены, я бы просто добавил эти строки в addCubeExperienceLabel
метод:
price.position = CGPoint.zero
price.verticalAlignmentMode = .center
price.horizontalAlignmentMode = .center
Установите горизонтальныйМодельный режим на.left, если вы хотите, чтобы текст начинался в центре экрана. Прямо сейчас центр текста находится в центре экрана.
Обратите внимание, что положение метки установлено в addCubeExperienceLabel
и не в adjustLabelFontSizeToFitRect
, Если вы отрегулируете размер шрифта метки, он все равно должен оставаться на своей позиции, как обычный SKSpriteNode остается на своей позиции после того, как его размер отрегулирован.
Надеюсь это поможет!