Как отобразить 2 ярлыка в одной сцене? - PullRequest
1 голос
/ 03 мая 2019

Я совершенно новичок в Swift и SpriteKit, извиняюсь, я действительно ничего не знаю.Я пытаюсь добавить 2 последовательных SKLabelNode в одну сцену.Фон сцены - черный.Я создал функцию, которая генерирует SKShapeNode из UIBezierPath для покрытия, скажем, 3/4 экрана в виде буквы P, .fill = .white.Я добавляю дочерний элемент и завершаю функцию.

Я добавляю функцию в переопределение didMove.(Не спрашивайте меня, почему, я следую некоторым примерам, и на данный момент это похоже на работу. Я рассмотрю это позже, но в данный момент я сосредоточен на текущей проблеме)

Затем я создаювторая функция для добавления 2 SKLabelNode.Один черный над белой частью и один белый над черной частью.Затем я добавляю оба к сцене.

Я добавляю функцию после фигуры один.

В результате черный цвет над белым участком не отображается.Если я прокомментирую белый цвет поверх черного, предыдущий будет отображаться без проблем.

Я попытался вывести порядок addChild, но результат не изменился.

Кто-нибудь знаетпричина?

Я пытался переключить addChild.

import SpriteKit

class MenuScene: SKScene {

override func didMove(to view: SKView) {
    layoutScene()
    addLabels()
}

func layoutScene() {
    backgroundColor = .black
    let rectSize = frame.size.width / 4
    //Codice per creare la scena della home
    //inizio
    let homeScreen = SKShapeNode()
    homeScreen.fillColor = .white
    let shapeHome = UIBezierPath()
    let shapeOrigin = CGPoint(x: view!.bounds.minX, y: view!.bounds.minY)
    shapeHome.move(to: shapeOrigin)
    shapeHome.addLine(to: CGPoint(x: view!.bounds.minX, y: view!.bounds.maxY))
    shapeHome.addLine(to: CGPoint(x: view!.bounds.maxX, y: view!.bounds.maxY))
    shapeHome.addLine(to: CGPoint(x: view!.bounds.maxX, y: rectSize))
    shapeHome.addLine(to: CGPoint(x: view!.bounds.maxX - rectSize, y: rectSize))
    shapeHome.addLine(to: CGPoint(x: view!.bounds.maxX - rectSize, y: view!.bounds.minY))
    shapeHome.addLine(to: CGPoint(x: view!.bounds.minX, y: view!.bounds.minY))
    shapeHome.close()
    homeScreen.path = shapeHome.cgPath
    homeScreen.fillColor = .white
    //fine
    addChild(homeScreen)
}

func addLabels() {
    let rectSize = frame.size.width / 4
    let home = SKLabelNode(text: "HOME")
    home.fontName = "AvenirNext-Bold"
    home.fontSize = 50.0
    home.fontColor = .black
    home.position = CGPoint(x: frame.midX, y: frame.midY)
    addChild(home)

    let b = SKLabelNode(text: "B")
    b.fontName = "AvenirNext-Bold"
    b.fontSize = 40.0
    b.fontColor = .white
    b.position = CGPoint(x: frame.maxX - (rectSize/2), y: rectSize/2)
    addChild(b)
}

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

    }
}

Ответы [ 2 ]

0 голосов
/ 03 мая 2019

Спасибо за помощь.

Я только что решил проблему с заменой цветов .black и .white на UIColor.black и UIColor.white.

Кто-нибудь знает причину?

0 голосов
/ 03 мая 2019

Попробуйте изменить zPosition всех добавляемых вами узлов, например, home.zPosition = 100.

Узел с более высоким zPosition будет показан над любым другим узлом с меньшим zPosition.Задавая узлам метки разные значения для zPosition, вы можете контролировать, какая метка будет показана выше, а какая ниже.

Более подробная информация доступна здесь: https://developer.apple.com/documentation/spritekit/sknode/1483107-zposition

Надеюсь, что этопомогает!

...