【问题标题】:Swift and Spritekit present the wrong sceneSwift 和 Spritekit 呈现错误的场景
【发布时间】:2018-01-14 17:32:07
【问题描述】:

我的游戏中有三个场景,第一个是红色的,第二个是黄色的,第三个是蓝色的,所以如果用户触摸红色场景呈现黄色场景,如果用户触摸黄色场景呈现蓝色场景并且蓝色场景让你回到红色场景,在真实游戏中 MenuSceneWaitingScenePlayScene

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

红色场景和扩展

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")
    }
}

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

顺便说一句:当我旋转模拟器或单击主页按钮,然后返回游戏 bleu 节点时弹出。

【问题讨论】:

  • 您是否对所有这些场景使用相同的 ViewController 和视图?
  • @Aleksandr 我认为这是模拟器中的错误,因为当我在真实设备上运行游戏时它运行良好。

标签: ios swift sprite-kit


【解决方案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)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    相关资源
    最近更新 更多