Я создал класс SKNode, который прекрасно работает.Тем не менее, я не могу изменить его положение после того, как я его создал.
Кнопка действительно появляется и работает правильно, но просто не меняет положение при программировании на.Я включил класс, созданный для кнопки ниже, я также добавил код, для которого я создаю экземпляр класса и вызываю позицию узлов.
код класса:
class LButton: SKNode {
var button: SKSpriteNode
private var mask: SKSpriteNode
private var cropNode: SKCropNode
private var action: () -> Void
var isEnabled = true
init(imageNamed: String, buttonAction: @escaping () -> Void) {
button = SKSpriteNode(imageNamed: imageNamed)
button.size = CGSize(width: 50.0, height: 50.0*(24/40))
mask = SKSpriteNode(color: SKColor.black, size: button.size)
mask.alpha = 0
cropNode = SKCropNode()
cropNode.maskNode = button
cropNode.zPosition = 3
cropNode.addChild(mask)
action = buttonAction
super.init()
isUserInteractionEnabled = true
setupNodes()
addNodes()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setupNodes() {
button.zPosition = 0
}
func addNodes() {
addChild(button)
addChild(cropNode)
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if isEnabled {
mask.alpha = 0.5
run(SKAction.scale(by: 1.05, duration: 0.05))
}
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
if isEnabled {
for touch in touches {
let location: CGPoint = touch.location(in: self)
if button.contains(location){
mask.alpha = 0.5
} else {
mask.alpha = 0.0
}
}
}
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
if isEnabled {
for touch in touches {
let location: CGPoint = touch.location(in: self)
if button.contains(location) {
disable()
action()
run(SKAction.sequence([SKAction.wait(forDuration: 0.2), SKAction.run({self.enable()})]))
}
}
}
}
func disable() {
isEnabled = false
mask.alpha = 0.0
button.alpha = 0.5
}
func enable() {
isEnabled = true
mask.alpha = 0.0
button.alpha = 1.0
}
}
код создания экземпляра:
var playButtonTwo: LButton {
let revealGameScene = SKTransition.fade(withDuration: 0.5)
let goToGameScene = GameSceneTwo(size: self.size)
goToGameScene.scaleMode = SKSceneScaleMode.resizeFill
var button = LButton(imageNamed: "playButton", buttonAction: { self.view?.presentScene(goToGameScene, transition:revealGameScene)
})
button.zPosition = 5
button.position = CGPoint(x: -self.frame.width*0.3, y: self.frame.height*0.4)
return button
}
призыв к изменению положения узлов:
playButtonTwo.position = CGPoint(x:0, y: -self.frame.height*0.4)
Любой совет приветствуется!