标签: sktransition

SpriteKit场景过渡良好实践

我正在使用 SpriteKit 和 Swift 编写一个游戏,但遇到了内存问题。

我的游戏的布局是这样的:GameViewController (UIViewController) 在 vi​​ewDidLoad 屏幕中呈现第一个 SKScene (levelChooserScene)。这个场景只是显示一堆按钮。当用户选择按钮时,场景会使用 skView.presentScene 转换到正确的场景,当关卡完成时,该场景会转换回 levelChooserScene,游戏就可以让用户选择下一个关卡。

问题是,当转换回 levelChooserScene 时,为游戏场景分配的内存不会被释放,因此在仅选择几个级别后,我开始收到内存错误。

我的设计从 SKScene 过渡到 SKScene 是否正确,或者我应该每次都返回到 GameViewController,然后从那里过渡到下一个 SKScene?

我在这里找到了一些帖子,说我应该在场景之间调用 skView.presentScene(nil) ,但我对如何或在哪里实现它感到困惑。

我只是想从一个 SKScene 转换到另一个 SKScene,并将传出场景使用的内存返回到系统。

这是我如何实现 SKScene 的示例:

class Level3: SKScene
{
   var explodingRockTimer = NSTimer()
   var blowingUpTheRocks = SKAction()

   override func didMoveToView(view: SKView)
   {
       NSTimer.scheduledTimerWithTimeInterval(5.0, target: self, selector: "dismissTheScene:", userInfo: nil, repeats: false)
       var wait = SKAction.waitForDuration(0.5)
       var run = SKAction.runBlock{
           // your code here ...
           self.explodeSomeRocks()
       }
       let runIt = SKAction.sequence([wait,run]) …
Run Code Online (Sandbox Code Playgroud)

out-of-memory sprite-kit skscene swift sktransition

5
推荐指数
1
解决办法
1649
查看次数

'永远不会被执行'

我不知道为什么此错误出现在代码中:

    func torpedoDidCollideWithAlien(torpedo:SKSpriteNode, alien:SKSpriteNode){
        print("HIT")
        torpedo.removeFromParent()
        alien.removeFromParent()

        var aliensDestroyed = 0
        aliensDestroyed += 1

        if (aliensDestroyed > 10){ //Transition to GameOver or Success
            let transition:SKTransition = SKTransition.flipHorizontalWithDuration(0.5)
                let gameOverScene:SKScene = GameOverScene(size: self.size, won: true)
                self.view?.presentScene(gameOverScene, transition: transition)
            }
Run Code Online (Sandbox Code Playgroud)

错误在一行:

let transition:SKTransition = SKTransition.flipHorizontalWithDuration(0.5) //'Will never be executed'
Run Code Online (Sandbox Code Playgroud)

if-statement ios swift sktransition

0
推荐指数
1
解决办法
1354
查看次数