2016-10-04 3 views
-2

업 그레 이드를 구입할 때 상점 현장에서 SKSpriteNode의 이미지를 변경하려고합니다. 변수를 올바르게 추적하고 있다고 생각합니다.하지만 잘못하고 있다고 생각합니다. 고급에 도움을 주셔서 감사합니다, 나는 그것을 행운으로 파악하기 위해 잠시 노력했습니다.조건이 충족되면 SKSpriteNode 이미지를 변경하는 방법은 무엇입니까?

1) 조건이 충족 될 때 true로 전환 부울 변수를 만듭니다 :

// 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

이 할 수있는 몇 가지 방법이 있습니다.)

var conditionIsMet = false 

// Your code 
// 
//... 

override func update(_ currentTime: CFTimeInterval) { 

     if conditionIsMet { 

      // Change your texture here 

     } 

} 

2 당신이 질감을 변경하고자 할 때의 트리거를 얻을 경우, 당신은 단순히의 일환으로 질감을 변경할 수 있습니다 그런 다음 업데이트 기능, 당신은 항상 조건이 충족되는 경우를 확인할 수 있습니다 실행되는 코드/기능. 즉, 터치로이 작업을 수행하려는 경우 텍스처를 변경하는 코드를 추가합니다.

는 참고 : 질감을 변경하려면 단지 같은 것을 할 :

node.texture = SKTexture(imageNamed: "image name goes here") 
관련 문제