Swift中的Skscene过渡

时间:2018-06-28 17:08:15

标签: swift skscene

本质上,我有一个菜单场景和一个关卡场景,并且我希望能够来回切换。如果您在这里看,您会看到第一个当前场景,开始显示菜单。

if let view = self.view as! SKView? {
        let testLevel = LevelMenu()
        testLevel.size = self.view.frame.size
        testLevel.initializeMenu(NumberOfLevels: 6, Restricted: true, MenuNumber: 1)
        testLevel.scaleMode = .fill
        view.presentScene(testLevel)
        view.ignoresSiblingOrder = true
        view.showsFPS = true
        view.showsNodeCount = true
    }

(LevelMenu是一个扩展SKScene的自定义类,initialize menu是一种用于设置场景细节的方法。)

现在,如果满足几个条件,则在LevelMenu类中,将调用以下代码以进入级别。

if let view = self.view as SKView? {
        view.presentScene(currentLevel)
    }

(currentLevel是存储当前Level对象的变量。)

此外,设置级别后,它们与设置菜单时的菜单具有相同的代码。

let TempLevel = Level()
TempLevel.size = self.size
TempLevel.setUp(package: menuNumber, numberInPackage: i, locked: 
   restricted, menu: self)
TempLevel.name = "Package \(menuNumber), Level \(i)"
TempLevel.scaleMode = .fill
levels.append(TempLevel)

(Level是另一个自定义的SKScene,setUp()是设置它的方法,而level是包含所有级别的数组。)

要返回到菜单,我仅通过已经传递给该类的菜单再次调用此代码。

if let view = self.view as SKView? { view.presentScene(currentLevel) }

这是问题所在:当我在菜单内调用转换按钮转到某个级别时,它可以完美运行。转场动画效果非常好;但是,当我调用presentScene()返回时,它将打印出我放入viewDidAppear()中的文本,除了它仍然显示级别Skscene和级别Skscene仍具有工作按钮。

我试图从父母那里删除场景,但这似乎不起作用,从我读到的内容来看,这是一个坏主意。我认为菜单场景会一直加载并且一直处于阻塞状态,当我调用presentScene时会说“嘿,我在这里”。但没有意识到我想要它。如果有某种方法可以停止显示关卡场景,而只是显示菜单,那将是很棒的,因为一旦您完成关卡,就不应该坐在那里。

在此先感谢您提供的所有帮助。

1 个答案:

答案 0 :(得分:0)

因此,尽管进行了更多的调查和调试,但我发现场景实际上是在加载,但是由于某些原因未显示。在尝试了视觉设置之后,我考虑过要确保场景的大小是正确的大小,我发现通过在返回菜单之前设置菜单的大小现在可以显示菜单。 我希望这个问题能对遇到类似问题的人有所帮助,感谢互联网。