我想以快速语言呈现SKScene
中的UIViewController
,
我在iOS中开发游戏,菜单是UIViewController
,游戏在SpriteKit中,我需要从菜单(UIViewController
)移动到游戏(SKScene
)按下按钮。
我怎么能这样做?
答案 0 :(得分:0)
喜欢@Ron Myschuk说你应该考虑将你的菜单移到SpriteKit
。如果您想使用UIKit
,则需要将SKScene
与UIViewController
进行通信(我猜这是您的问题)。
您可以使用delegate pattern实现此目的。
使用此模式,您的代码可能如下所示:
/// Game actions that should be notified.
Protocol GameSceneDelegate: class {
func gameDidEnd()
}
public class GameScene: SKScene {
weak var gameDelegate: GameSceneDelegate?
// MARK: - Menu Actions
func userDidPressMenuButton() {
///Do what you want to do..
}
}
class GameViewController: UIViewController, GameSceneDelegate{
var scene: GameScene?
override func viewDidLoad() {
if (self.view as! SKView?) != nil {
self.scene = GameScene(fileNamed: "GameScene")
}
self.scene?.gameDelegate = self
}
// MARK: - GameSceneDelegate methods
func gameDidEnd(){
///Do what you want to do..
}
// MARK: - Actions
@IBAction func pressMenuButtonAction(_ sender: Any) {
self.scene?.userDidPressMenuButton()
}
}
当您在UIViewController
按下按钮时,您可以致电SKScene
以执行其需要执行的操作。当场景需要告诉菜单一个相关的动作(比如游戏结束)时,它会调用它的代理人,即你的UIViewController
。