2016-12-06 6 views
2

具体的には、SpriteKit。 GameSceneでSwiftの別のクラスから文字列を呼び出すにはどうすればよいですか?

私は、変数を設定します。絶えず変更されている

var score = Int() 

。 EndScene.swiftでは、そのスコアをラベルに印刷したいと思います。

scoreLabel.text = "SCORE:" + String(score) 

しかしEndSceneはGameSceneから値としてスコアを認識しません:私はラベルのために持っている何

は普通です。どのように私はその文字列で 'スコア'を呼び出すことができますか? GameSceneで

Iは、funcが(_ scoreToAdd:INT)FUNC updateScore

呼ばた{EndScoreにスコア何

score = score + scoreToAdd 

    scoreLabel.text = "Score: " + String(score) 

} 

が等しくなければなりません。どうやってやるの?

+0

回答は正しいと、ちょうどVARスコアは= INTは() 'で'書き込み、言及したかったです'var score = 0'を書くのと同じで、後者はそれを行うための最良の方法です。あなたはそのようなIntを割り当ててはいけません。 –

+0

Kayla、そうです。スコアはEndSceneで毎回= 0になっています。あなたはそれを修正することをどのように提案しますか? – GabrielsGalaxy

答えて

1

あなたはGameSceneクラスの外からアクセスできるようにスコアがGameScene.swiftでpublicとして定義されていることを確認する必要がある -

public var score = Int() 

次にあなたがGameSceneオブジェクトとそれにアクセスすることを確認してください -

let game = GameScene() 
scoreLabel.text = "SCORE:" + String(game.score) 
+0

私はこれを試しましたが、EndSceneはスコアを認識しますが、実際にGameSceneでどのスコアが等しいかにかかわらず、スコア:0として印刷されます。 GameSceneに print(String(score))を挿入してスコアが0でないことを確認しました。その後EndSceneでprint(String(game.score))を挿入し、毎回出力が0であることを確認しました。何がうまくいかないでしょうか? – GabrielsGalaxy

+0

詳細は私の編集したポストを参照してください – GabrielsGalaxy

+0

@GabrielsGalaxy GameScene.swiftとEndScene.swiftと同じインスタンスが「ゲーム」であることを確認していますか? – Starlord

0

あなたは価値をファイルに保存して、必要ないところにそれを取得するためにNSArchiverを使用する必要がありますが、それはあなたが望むようにあなたがUserDefaultsを通して、あなたのスコア値を保存することができるようにだけ、単一のパラメータを保存するために、長い方法です(もknowedとして次のステップのユーザーデフォルトまたはNSDefaults)。すばやく簡単に使用できます。

// Save score value 
UserDefaults.standard.set(score, forKey:"score") 
UserDefaults.standard.synchronize() 

// Retrieve score value 
if let savedScore = UserDefaults.standard.object(forKey: "score") { 
    print(savedScore) 
} 
0

EndSceneに移動するときは、userDataを使用してデータを転送します。

func movingToEndScene() 
{ 
    let endScene = EndScene(...) 
    let userData = ["score":score] 
    endScene.userData = userData 
    self.view.presentScene(endScene) 
} 

その後、エンド・シーンの内側に、あなたはそれをあなたがやりたいことができます。以下

​​
関連する問題