2016-09-30 11 views
0

私はcoinLabelを更新しようとしています。そのため、 "life"ノードをタップすると、SKLabelNodeが更新され、合計から差し引かれた後に正しいコインが表示されます。私はコーディングに新しいので、もし何か他のことが間違っていたら、この返信をしてください!ありがとう!SKLabelNodeを更新することはできますか?

import Foundation 
import SpriteKit 

class ShopScene: SKScene { 

override func didMove(to view: SKView) { 


    let background = SKSpriteNode(imageNamed: "background") 
    background.size = self.size 
    background.position = CGPoint(x: self.size.width/2, y: self.size.height/2) 
    background.zPosition = 0 
    self.addChild(background) 

    let mainMenu = SKLabelNode(fontNamed: "The Bold Font") 
    mainMenu.text = "Main Menu" 
    mainMenu.fontSize = 100 
    mainMenu.fontColor = SKColor.darkGray 
    mainMenu.position = CGPoint(x: self.size.width*0.5, y: self.size.height*0.3) 
    mainMenu.zPosition = 1 
    mainMenu.name = "Main Menu" 
    self.addChild(mainMenu) 

    let Life = SKLabelNode(fontNamed: "The Bold Font") 
    Life.text = "Click here to buy 1 life!" 
    Life.fontSize = 130 
    Life.fontColor = SKColor.darkGray 
    Life.position = CGPoint(x: self.size.width*0.5, y: self.size.height*0.6) 
    Life.zPosition = 1 
    Life.name = "Life" 
    self.addChild(Life) 

    let coinLabel = SKLabelNode(fontNamed: "The Bold Font") 
    coinLabel.text = "Coins: \(coinNumber)" 
    coinLabel.fontSize = 100 
    coinLabel.fontColor = SKColor.black 
    coinLabel.zPosition = 1 
    coinLabel.position = CGPoint(x: self.size.width/2, y: self.size.height*0.1) 
    self.addChild(coinLabel) 



} 


override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 


    for touch: AnyObject in touches { 

     let pointOfTouch = touch.location(in: self) 
     let nodeITapped = atPoint(pointOfTouch) 

     if nodeITapped.name == "Main Menu" { 


      let sceneToMoveTo = MainMenuScene(size: self.size) 
      sceneToMoveTo.scaleMode = self.scaleMode 
      let myTrasition = SKTransition.fade(withDuration: 0.5) 
      self.view!.presentScene(sceneToMoveTo, transition: myTrasition) 
     } 

      if nodeITapped.name == "Life" { 
       if coinNumber > 10 { 
       lifeNumber += 1 
       coinNumber -= 10 
       defaults.set(coinNumber, forKey: "coinNumberSaved") 
       defaults.set(lifeNumber, forKey: "lifeNumberSaved") 


       return 

       } 


      } 
     } 


    } 


} 

答えて

0

ちょうどあなたが外でそれを操作することができますので、それは

coinLabel.text = "Coins: \(coinNumber)" 

あなたはあなたのinitの外にあなたのcoinLabelの参照を持っていることを確認する必要があります変更するにはもう一度タップ認識でテキストを更新それ。あなたが行うことができますShopSceneの上部に ...

class ShopScene: SKScene { 
var coinLabel = SKLabelNode() 
//your code 
} 

、その後、あなたが代わりに行う、:) FUNCを表示する(自分のdidMoveにinitに行く...

coinLabel = SKLabelNode(fontNamed: "The Bold Font") 

ことコード全体で参照できるようにします。将来的には、SKNodeのサブクラスをすべてのUI要素を処理するように考えて、あなたのGameSceneのすべてを初期化しないようにしたいと思うでしょう。

+0

助けてくれてありがとう!それは完璧に働いた。 –

+0

@ ZacharyWalensaこの回答が問題を解決した場合は、答えを正しいものとしてマークし、必要に応じてupvote – Nik

関連する問題