【问题标题】:How do I call a function from GameScene in GameViewController using SpriteKit in Swift?如何在 Swift 中使用 SpriteKit 从 GameViewController 中的 GameScene 调用函数?
【发布时间】:2016-03-24 22:51:08
【问题描述】:

我已经阅读了无数解决方案,但没有一个对我有用。

在 GameScene 中我有一个函数

func resetBalloon(){

    balloonNode?.runAction(SKAction.moveTo(balloonLocation!, duration: 0.5))


}

在 GameViewController 我有代码

class GameViewController: UIViewController {
var gameScene = GameScene()

紧随其后

func resetID(sender:AnyObject!){ //function is linked to a button
    gameScene.resetBalloon()
    println("all good") //this line runs when the button is pressed

    }

有什么建议吗?提前感谢您提供的任何帮助。

【问题讨论】:

  • 您是否验证过,您的 ballonNode 已设置,如果为 nil,则不会发生任何事情。尝试在 resetBallon() 中编写日志语句并验证是否已写出。
  • 我还在 GameScene 中调用的屏幕触摸上调用了 resetBallon() 函数,并且该函数在触摸屏幕时运行。

标签: swift function class


【解决方案1】:

如果我没记错GameViewController的主要作用只是呈现SKScene,而游戏逻辑应该在SKScene中。当然也有例外,但我不认为 resetBalloon() 是其中之一。

所以你的GameViewController 可能是这样的:

class GameViewController: UIViewController {

  override func viewDidLoad() {
    super.viewDidLoad()
    let scene = GameScene(size: view.bounds.size)
    let skView = view as! SKView
    ...
    skView.presentScene(scene)
  }
}

其他所有内容(甚至切换到另一个场景)都应该在 GameScene 中。

【讨论】:

  • 谢谢,我知道这是可能的,但我目前正在第一次使用 SpriteKit 进行探索,只是想了解一切是如何工作的——我能做什么和不能做什么。
  • 没问题,试试看一些教程,例如raywenderlich.com/119815/…(整个网站都是很好的教程来源),如需进一步阅读,请查看 Apple 文档 - developer.apple.com/library/ios/documentation/GraphicsAnimation/…
  • 换句话说,您不应该使用 GameViewController 来控制场景类中的对象。 GameViewController 只是呈现场景,并准备其他与场景控制无关的小事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多