Начальная точка 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 остается на своей позиции после того, как его размер отрегулирован.

Надеюсь это поможет!

Другие вопросы по тегам