How to switch SKScenes in SpriteKit with Swift properly?

安稳与你 提交于 2020-01-03 17:21:09

问题


I am developing a game with 3 different SKScenes(scene1, scene2, scene3). In GameViewController i initialize all of them like this:

class GameViewController: UIViewController {
  var hero = Hero()
  var skView: SKView!

  var scene1: SKScene!
  var scene2: SKScene!
  var scene3: SKScene!

  override func viewDidLoad() {
    super.viewDidLoad()

    // init scenes
    scene1 = SKScene(size: view.bounds.size, hero: hero)
    scene2 = SKScene(size: view.bounds.size, hero: hero)
    scene3 = SKScene(size: view.bounds.size, hero: hero)

    scene1.scaleMode = .AspectFill
    scene2.scaleMode = .AspectFill
    scene3.scaleMode = .AspectFill

    // set view
    skView = self.view as SKView

    // present the first scene
    skView.presentScene(scene1)
}

My idea is to present the first scene at first and present(swith to) the other scene later(i.e. when hero is stronger). In each scene the hero sprite was added like this:

  func addHero() {
    let heroSprite = SKSpriteNode(imageNamed: "hero")
    hero.sprite = heroSprite
    heroSprite.position = CGPoint(x: size.width/4, y: size.height/2)
    addChild(heroSprite)
  }

And in update method, hero position is updated by touching.

func update() {
  if touching {
    hero.position++
  }
}

Hero class looks like this:

class Hero {
  var sprite: SKSpriteNode?
}

The problem is: The hero is movable by touching when only the first scene(scene1) is initialized. Which means, the hero is not movable any more with code above.

Can anyone give me some advice what have i done wrong? Thanks in advance!

PS: The complete codes can be found in Github.


回答1:


The issue is solved by another related question: Sprites must be cleaned before switch scenes with SpriteKit and Swift?

By switching scenes, be sure not to add the sprites twice by checking the init status. For example in "didMoveToView", "init" or "setup" method:

if isInit {
  do nothing
} else {
  add sprites
  isInit = true
}


来源:https://stackoverflow.com/questions/26225071/how-to-switch-skscenes-in-spritekit-with-swift-properly

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!