【问题标题】:Updating nodes in a SpriteKit scene from an outside UIViewController从外部 UIViewController 更新 SpriteKit 场景中的节点
【发布时间】:2016-06-18 03:42:38
【问题描述】:

如何从场景本身外部更新 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! ????"
    }

视图控制器

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。但我对从外部事件更新场景特别感兴趣。有什么想法吗?

【问题讨论】:

    标签: ios swift sprite-kit uikit


    【解决方案1】:

    在文件中你的按钮在哪里:

    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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-21
      相关资源
      最近更新 更多