2017-01-20 9 views
2

ゲームプレイキットが統合された通常のゲームアプリの設定を使用します。シーンでは私はSwift SpriteKitスプライトは移動しますが元の位置を保持します

self.hero = SKShapeNode.init(rectOf: CGSize.init(width: 10, height: 10), cornerRadius: 1) 
    if let hero = self.hero { 
     let pos = CGPoint.init(x: -50, y: -90) 
     hero.lineWidth = 5 
     hero.position = pos 
    } 

    self.addChild(self.hero!) 

を追加した負荷が次に更新機能では、私はこれが正常に動作してスプライトを移動する必要に応じて、しかし、元にスプライトのコピーが存在すると考え

if let hero = self.hero { 
     let moveAction = SKAction.moveTo(x: 12, duration: 1) 
     hero.run(moveAction) 
    } 

を追加しましたポジション。私は何が欠けている。確かにそれは除去され、あなたが(「Hello World」のスプライト・キットゲームテンプレート構文として)使用する必要がありますので、起こったすべての更新

+0

あなたが別の関数内の変数のヒーローにアクセスするにはどうすればよいが、あなたはそれがグローバルたのですか? **すべての**関連コード – Eric

+0

を表示してください。特に、 'self.addChild(self.hero!)'行が呼び出された場所にコードを追加してください。おそらくこのコードラインは何度も呼び出され、重複しているだけです(再利用されたTabelViewCellの一般的なエラーに似ています)。 – muescha

+0

私は不必要な 'let hero = self .hero'は更新機能の中にあり、おそらくあなたのアプリは毎回ヒーローを再現させるでしょう。 – Eric

答えて

1

に追加する必要はありません。

override func didMove(to view: SKView) {} 

の代わりに、 :

override func sceneDidLoad() {} 

は二回、Xcodeのは、最初のシーンのダミー版、その後、実際の場面を設定しsceneDidLoadが発射されると思われます。また、それについて開かれたbugがあります。

あなたのコード出力

enter image description here

didMove(to view:と出力:あなたのコメントについて

enter image description here


は、この画像を見てみましょう(それがあちこちに来ますメートルXcodeのバージョン8.2.1 - 新しいプロジェクト - ゲームテンプレート(SpriteKitベース):

enter image description here

+0

これはうまくいきましたが、私はSceneDidLoadがそうであるように(「hello world」のSprite-kitゲームテンプレート構文として)テンプレートのデフォルト –

+0

私の答え、最後の更新を見てみましょう。 –

+0

「ゲームプレイキットを統合する」チェックボックスを選択した場合の外観から見ると、それはsceneDidLoadに変更されます –

関連する問題