繁体   English   中英

从外部UIViewController更新SpriteKit场景中的节点

[英]Updating nodes in a SpriteKit scene from an outside UIViewController

如何从场景本身之外更新SpriteKit场景。 例如,如何通过按下UIButton更新SKLabelNode。

现场

class GameScene: SKScene {

    var myLabel:SKLabelNode = SKLabelNode()

    override func didMoveToView(view: SKView) {
        myLabel.text = "Initial State"
        myLabel.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame))
        self.addChild(myLabel)
    }

    func didPressButton() {
        myLabel.text = "Pressed! 👻"
    }

ViewController

import UIKit
import SpriteKit

class GameViewController: UIViewController {

    @IBAction func didPressButton(sender: AnyObject) {
        if let scene = GameScene(fileNamed:"GameScene") {
            scene.didPressButton()
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        if let scene = GameScene(fileNamed:"GameScene") {
            let skView = self.view as! SKView
            skView.presentScene(scene)
        }
    }

    …

}

我知道,场景中通常的touchesBegan对于更新场景中的SKLabelNode效果很好。 但是我特别想从外部事件中更新场景。 有任何想法吗?

在文件中,您的按钮在哪里:

protocol PauseBtnSelectorDelegate {
    func didPressPauseBtn(pauseBtn:SKSpriteNode)
}

class HUD: SKNode {
    var pauseBtnDelegate:PauseBtnSelectorDelegate?
    var pauseBtn :SKSpriteNode!
    ...
    func pauseBtnTap(sender:SKSpriteNode) {
        print("pauseBtn touched")
        pauseBtnDelegate!.didPressPauseBtn(sender)
    }
}

在要通知点击事件的文件中:

class GameScene: SKScene,PauseBtnSelectorDelegate {
    var hud: HUD!
   ...
    override func didMoveToView(view: SKView) {
        super.didMoveToView(view)
         // Adding HUD
        self.hud = HUD(currentScene: self,nodeSize: self.frame.size)
        self.hud.pauseBtnDelegate = self
        self.addChild(hud)
    }

    func didPressPauseBtn(pauseBtn:SKSpriteNode) {
        print("pauseBtn touched")
        // Pause the game
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM