Spritekit: переход от кнопок UIB к кнопкам в качестве SKSpriteNode - PullRequest
0 голосов
/ 26 сентября 2018

Я работаю над игрой SpriteKit и сначала я поместил 4 UIButton в свой GameplayScene, но затем я решил создать отдельные кнопки как SKSpriteNode, программно созданный, и использовать класс (класс Button: SKSpriteNode).Я хочу, чтобы при нажатии мои кнопки немного исчезали и масштабировались, а затем возвращались в исходное состояние.Кнопки исчезают и уменьшаются, но они остаются в этом состоянии, не возвращаются в нормальное состояние.Что не так с моим кодом?

импорт SpriteKit

протокол ButtonDelegate: NSObjectProtocol {func buttonClicked (sender: Button)}

class Button: SKSpriteNode {

weak var delegate: ButtonDelegate!

var buttonTexture = SKTexture()

init(name: String) {
    buttonTexture = SKTexture(imageNamed: name)
    super.init(texture: buttonTexture, color: .clear, size: buttonTexture.size())
    self.isUserInteractionEnabled = true
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

var touchBeganCallback: (() -> Void)?
var touchEndedCallback: (() -> Void)?

weak var currentTouch: UITouch?

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    touchBeganCallback?()
    if isUserInteractionEnabled {
        setScale(0.9)
        self.alpha = 0.5
        if let currentTouch = touches.first {
            let touchLocation = currentTouch.location(in: self)
            for node in self.nodes(at: touchLocation) {
        delegate?.buttonClicked(sender: self)

            }
        }
    }
}

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    setScale(1.0)
    self.alpha = 1.0
    touchEndedCallback?()
    print("tapped!")
}

}

1 Ответ

0 голосов
/ 26 сентября 2018

Используйте для этого SKAction.

В touchSegan удалите setScale (0.9) и self.alpha = 0.5, используйте:

        let scaleAction = SKAction.scale(to: 0.5, duration: 1)
        self.run(scaleAction)

        let fadeAction = SKAction.fadeAlpha(to: 0.5, duration: 1)
        self.run(fadeAction)

в touchEnded сделайте то же самое и добавьте:

    self.removeAllActions()
    let scaleAction = SKAction.scale(to: 1, duration: 1)
    self.run(scaleAction)

    let fadeAction = SKAction.fadeAlpha(to: 1, duration: 1)
    self.run(fadeAction)

РЕДАКТИРОВАТЬ:

Здесь тест на игровую площадку:

enter image description here

...