ios - 如何使用 Swift 正确切换 SpriteKit 中的 SKScenes?

标签 ios swift sprite-kit skscene skview

我正在开发一款包含 3 个不同 SKScenes(场景 1、场景 2、场景 3)的游戏。在 GameViewController 中,我像这样初始化它们:

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

我的想法是先呈现第一个场景,然后再呈现(切换到)另一个场景(即当英雄更强时)。在每个场景中,英雄 Sprite 都是这样添加的:

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

在更新方法中,英雄位置通过触摸更新。

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

英雄类看起来像这样:

class Hero {
  var sprite: SKSpriteNode?
}

问题是: 当第一个场景(scene1)初始化时,英雄可以通过触摸移动。也就是说,使用上面的代码,英雄不能再移动了。

谁能给我一些建议,我做错了什么?提前致谢!

PS:完整代码见Github .

最佳答案

该问题由另一个相关问题解决:Sprites must be cleaned before switch scenes with SpriteKit and Swift?

通过切换场景,确保不要通过检查初始化状态来添加 Sprite 两次。例如在“didMoveToView”、“init”或“setup”方法中:

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

关于ios - 如何使用 Swift 正确切换 SpriteKit 中的 SKScenes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26225071/

相关文章:

objective-c - 检查一个物理体是否正在接触另一个物理体,而无需等待 didBeginContact

iphone - MediaPlayer MPMoviePlayerController - 不在横向播放视频

ios - 使用 UIProgressView 将进度条设置为 30 分钟

swift - 在 Swift 中格式化俄语日期

ios - 传入要与对象映射器一起使用的类类型

swift - "Operand of postfix '! ' should have optional type; type is ' CG向量 '"

IOS 检查手机语言的最佳和安全方法是什么?

javascript - 如何使用 Objective-C 从 IOS Cordova 中的设备(本地数据库)中删除图像

ios - 以编程方式在 iOS 中禁用 Dock

ios - 如何使用 SpriteKit 制作聚光灯效果?