4

3 つの異なる SKScenes (scene1、scene2、scene3) を使用してゲームを開発しています。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)
}

私のアイデアは、最初のシーンを最初に提示し、後で別のシーンを提示する(つまり、ヒーローが強い場合)ということです。各シーンで、ヒーロー スプライトは次のように追加されました。

  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にあります。

4

1 に答える 1

0

この問題は、別の関連する質問によって解決されます: SpriteKit と Swift でシーンを切り替える前に、スプライトを消去する必要がありますか?

シーンを切り替えて、init ステータスを確認してスプライトを 2 回追加しないように注意してください。たとえば、「didMoveToView」、「init」、または「setup」メソッドの場合:

if isInit {
  do nothing
} else {
  add sprites
  isInit = true
}
于 2014-10-10T12:12:42.237 に答える