Swift和Spritekit呈现错误的场景

时间:2018-01-14 17:32:08

标签: ios swift sprite-kit

我的游戏中有三个场景,第一个是红色,第二个是黄色,第三个是蓝色,所以如果用户触摸存在的黄色场景到黄色场景,如果它们触摸黄色场景到蓝色场景,蓝色场景返回红色场景,在真实游戏中 MenuScene WaitingScene PlayScene

如果我在红色场景中触摸黄色场景中的每个方法都被调用但是红色节点仍然可见,如果我再次触摸蓝色场景中的方法并调用黄色节点,基本上每次都出现在下一个场景中观点或迟到一步。

红色场景和扩展程序

import SpriteKit
import GameplayKit

class RedScene : SKScene {

    override func sceneDidLoad() {
        print("red")
        let red = SKSpriteNode(color: .red, size: CGSize(width: self.frame.size.width, height: self.frame.size.height))
        red.position = CGPoint(x: 0, y: 0)
        self.addChild(red)

    }

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        present(Scene: "YellowScene")
    }
}
extension SKScene{
    func present(Scene scene : String){
        if let scene = SKScene(fileNamed: scene){
            scene.scaleMode = .aspectFill
            self.view?.presentScene(scene)
        }
    }
}`

黄色场景

    import SpriteKit

class YellowScene : SKScene{


    override func sceneDidLoad() {
        print("yellow")
        let yellow = SKSpriteNode(color: .yellow, size: CGSize(width: self.frame.size.width, height: self.frame.size.height))
        yellow.position = CGPoint(x: 0, y: 0)
        self.addChild(yellow)

    }
    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        present(Scene: "BlueScene")
    }
}

蓝色场景

import SpriteKit

class BlueScene : SKScene{

    override func sceneDidLoad() {
        print("blue")
        let blue = SKSpriteNode(color: .blue, size: CGSize(width: self.frame.size.width, height: self.frame.size.height))
        blue.position = CGPoint(x: 0, y: 0)
        self.addChild(blue)
    }

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        present(Scene: "RedScene")
    }
}

图片:现在我应该在蓝色场景中,但黄色节点仍然在这里!!

enter image description here

顺便说一句:当我旋转模拟器或点击主页按钮然后再回到游戏蓝色节点时弹出。

1 个答案:

答案 0 :(得分:1)

尝试使用实际类加载场景。

打开黄色场景:

if let scene = YellowScene(fileNamed: "YellowScene"){
  scene.scaleMode = .aspectFill
  self.view?.presentScene(scene)
}

打开蓝色场景:

if let scene = BlueScene(fileNamed: "BlueScene"){
  scene.scaleMode = .aspectFill
  self.view?.presentScene(scene)
}