如何在SpriteKit(在Swift中)转到旧场景?我在场景1中,我暂停了它,我移动到场景2,我想回到场景1,然后我恢复它。我不想再重新创建它。 感谢。
编辑:
所以,我试过这个: 在secondScene类中,我放置了一个oldScene SKScene属性和一个计算的setOldScene属性:
class SecondScene: SKScene {
var oldScene:SKScene?
var setOldScene:SKScene? {
get { return oldScene }
set { oldScene = newValue }
}
init(size: CGSize) {
super.init(size: size)
/* Setup my scene here */
}}
然后,在FirstScene课程中(我有一个移动球),在touchBegan方法中我有这个
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
/* Called when a touch begins */
for touch: AnyObject in touches {
let location = touch.locationInNode(self)
if(self.view.scene.paused) {
self.view.scene.paused = false
}
else {
self.view.scene.paused = true
}
var secondScene = SecondScene(size: self.frame.size)
secondScene.setOldScene = self.scene
if !transition { self.view.presentScene(secondScene, transition: SKTransition.doorsOpenHorizontalWithDuration(2)) ; transition = true }
}
}
但是,当我在SecondScene课程中调用self.view.presentScene(oldScene)
时,我会移动你的第一堂课,我有两个移动的球: - ??
我不能使用类变量,Xcode还没有支持。
答案 0 :(得分:1)
我通过在第二个场景上拥有一个公共属性解决了这个问题。 然后使用它来呈现第一个场景。
所以在第一个场景中,当你想要显示第二个场景....
if let scene = SKScene(fileNamed: "SecondScene") as! SecondScene?
{
scene.parentScene = self
self.view?.presentScene(scene)
}
以下代码位于SecondScene中。 准备返回第一个场景时,只需调用方法showPreviousScene()...
public var parentScene: SKScene? = nil
private func showPreviousScene()
{
self.view?.presentScene(parentScene!)
}
答案 1 :(得分:0)
您必须保留对旧场景的引用,然后当您想要回到它时,只需致电
skView.presentScene(firstScene)
在您的SKView实例上。
有几种方法可以保持对班级的引用。您可以使用Singleton,或只使用class type property的类来存储引用,并从任何位置访问它。