2016-10-04 2 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) Создайте булеву переменную, которая переключается на верно, когда условие выполняется. Затем в функции обновления, вы можете постоянно проверять, если условие:

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") 
Смежные вопросы