2016-10-04 67 views
-2

我試圖改變我的店鋪場景中SKSpriteNode的圖像,當購買升級時,我相信我在變量的正確軌道上,但我認爲我做錯了。感謝在先進的幫助,我一直在嘗試一段時間來找出它沒有運氣。如何在條件滿足時更改SKSpriteNode圖像?

// ShopScene.swift 
// TheLastFlight 
// 
// Created by -Zachary Walensa- on 8/3/16. 
// Copyright © 2016 -Zachary Walensa-. All rights reserved. 
// 

import Foundation 
import SpriteKit 

var coinUpgrade = defaults.integer(forKey: "coinUpgradeSaved") 
var missileUpgrade = defaults.integer(forKey: "missileUpgradeSaved") 

class ShopScene: SKScene { 
var coinLabel = SKLabelNode(fontNamed: "The Bold Font") 
var missileUpgrades = SKSpriteNode(imageNamed: "missile1") 

override func didMove(to view: SKView) { 

    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) 

    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 = SKSpriteNode(imageNamed: "lifeButton") 
    Life.position = CGPoint(x: self.size.width*0.3, y: self.size.height*0.8) 
    Life.zPosition = 1 
    Life.name = "Life" 
    self.addChild(Life) 

    let coinUpgrades = SKSpriteNode(imageNamed: "coinUpgrade") 
    coinUpgrades.position = CGPoint(x: self.size.width*0.5, y: self.size.height*0.8) 
    coinUpgrades.zPosition = 1 
    coinUpgrades.name = "Coin" 
    self.addChild(coinUpgrades) 


    missileUpgrades.position = CGPoint(x: self.size.width*0.8, y: self.size.height*0.8) 
    missileUpgrades.zPosition = 1 
    missileUpgrades.name = "missile" 
    self.addChild(missileUpgrades) 


    /*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 >= 50 { 
       lifeNumber += 1 
       coinNumber -= 50 
       defaults.set(coinNumber, forKey: "coinNumberSaved") 
       defaults.set(lifeNumber, forKey: "lifeNumberSaved") 

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

       } 
     } 

       if nodeITapped.name == "Coin" { 
        if coinNumber >= 600 { 
         coinNumber -= 600 
         defaults.set(coinNumber, forKey: "coinNumberSaved") 
         coinUpgrade = 1 
         defaults.set(coinUpgrade, forKey: "coinUpgradeSaved") 
         coinLabel.text = "Coins: \(coinNumber)" 

        } 
     } 
     if nodeITapped.name == "missile" { 
      if missileUpgrade == 2 { 
       missileUpgrade = 1 
       defaults.set(missileUpgrade, forKey: "missileUpgradeSaved") 
       if missileUpgrade == 1 { 
        missileUpgrade = 2 
        defaults.set(missileUpgrade, forKey: "missileUpgradeSaved") 
       } 
      } 
      else if missileUpgrade == 0 || coinNumber >= 1400 { 
       coinNumber -= 1400 
       defaults.set(coinNumber, forKey: "coinNumberSaved") 
       missileUpgrade = 2 
       defaults.set(missileUpgrade, forKey: "missileUpgradeSaved") 
       coinLabel.text = "Coins: \(coinNumber)" 
       missileUpgrades = SKSpriteNode(imageNamed: "missile") 



      } 


     } 
    } 


} 

} 
+0

請只交相關的代碼。在問題中看到這麼多的代碼會讓人們遠離閱讀問題,因爲它變得麻煩 – Nik

回答

1

有幾個方法可以做到這一點:

1)創建時滿足條件切換爲true的布爾變量。然後,在更新功能,你可以經常檢查,如果條件得到滿足:

var conditionIsMet = false 

// Your code 
// 
//... 

override func update(_ currentTime: CFTimeInterval) { 

     if conditionIsMet { 

      // Change your texture here 

     } 

} 

2)你在哪裏得到的,當你想改變紋理扳機,你可以簡單地改變紋理的一部分代碼/函數運行。這意味着,如果您嘗試通過觸摸來完成此操作,則可以添加代碼以更改其中的紋理。

FYI:要改變紋理只是做這樣的事情:

node.texture = SKTexture(imageNamed: "image name goes here")