Создание SKLabelNode Игнорировать штрихи - PullRequest
0 голосов
/ 25 марта 2019

В Swift и SpriteKit вы можете назначить объект как "isUserInteractionEnabled = false". Это сбивает с толку, это не означает, что объект будет игнорировать касания и позволять этим касаниям проходить через узлы под ним.

При создании приложений SpriteKit я очень часто создаю узел (например, SKShapeNode или SKSpriteNode), а затем добавляю метку. Я хочу, чтобы метка игнорировала прикосновения и позволяла этим прикосновениям проходить к узлу позади него, но я не понимаю, как это делается, если «isUserInteractionEnable» не является билетом.

Есть предложения? Вот образец этикетки, который получает прикосновения, но не должен:

class MenuButton: SKShapeNode {

    /*  The MenuBar will have as children nine buttons of two types.  Dialog Springers and SubMenu Droppers  */

    // MARK: - Class Variables

    var title = "Button"
    var menu = SKShapeNode()

    let buttonLabel = SKLabelNode(fontNamed: devFont4)

    init(title: String)
    {
        super.init()

        isUserInteractionEnabled = true

        self.title = title
        self.name = "\(title) Menu Button"
        let btnLen = title.count * 10 + 16

        let menuSize = CGSize(width: btnLen, height: 32)
        menu = SKShapeNode(rectOf: menuSize)
        addChild(menu)

        menu.fillColor = .clear
        menu.strokeColor = .clear
        menu.lineWidth = 0

        menu.zPosition = 501

        // Add Label
        let letterHeight: CGFloat = 22
        buttonLabel.text = title
        buttonLabel.name = "\(title) Label"
        buttonLabel.fontSize = letterHeight
        buttonLabel.fontColor = .black
        buttonLabel.zPosition = 502
        buttonLabel.position = CGPoint(x: 0, y: Int(-letterHeight/2) + 2)
        buttonLabel.isUserInteractionEnabled = false
        addChild(buttonLabel)

    }
}

Ответы [ 2 ]

1 голос
/ 26 марта 2019

В Swift и SpriteKit вы можете назначить объект как "isUserInteractionEnabled = false".Смущает, что это не означает, что объект будет игнорировать касания и позволять этим касаниям проходить через узлы под ним.

Это неверно, isUserInteractionEnabled = false означает, что объект будет игнорировать касания и позволять касаниям проходитьчерез него.

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

1 голос
/ 25 марта 2019

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

class Button: SKLabelNode{
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    print("button")
}
}

class MenuButton: SKShapeNode {

/*  The MenuBar will have as children nine buttons of two types.  Dialog Springers and SubMenu Droppers  */

// MARK: - Class Variables

var title = "Button"
var menu = SKShapeNode()

let buttonLabel = Button.init()

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

init(title: String)
{
    super.init()

    isUserInteractionEnabled = true




    self.title = title
    self.name = "\(title) Menu Button"
    let btnLen = title.count * 10 + 16

    let menuSize = CGSize(width: btnLen, height: 32)
    menu = SKShapeNode(rectOf: menuSize)
    addChild(menu)

    menu.fillColor = .green
    menu.strokeColor = .clear
    menu.lineWidth = 0

    menu.zPosition = 501
    menu.isUserInteractionEnabled = false
    // Add Label
    let letterHeight: CGFloat = 122

    buttonLabel.text = title
    buttonLabel.name = "\(title) Label"
    buttonLabel.fontSize = letterHeight
    buttonLabel.fontColor = .black
    buttonLabel.zPosition = 502
    buttonLabel.position = CGPoint(x: 0, y: Int(-letterHeight/2) + 2)
    buttonLabel.isUserInteractionEnabled = true
    addChild(buttonLabel)

     self.path = UIBezierPath.init(rect:self.calculateAccumulatedFrame()).cgPath
    self.fillColor = UIColor.red

 }

 required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...