Swift 一旦满足条件,如何更改SKSpriteNode映像?

Swift 一旦满足条件,如何更改SKSpriteNode映像?,swift,skspritenode,Swift,Skspritenode,当购买升级时,我试图改变商店场景中SKSpriteNode的形象,我相信我使用该变量是正确的,但我认为我做得不对。谢谢你在advanced中的帮助,我已经尝试了一段时间来解决这个问题,但运气不好 // ShopScene.swift // TheLastFlight // // Created by -Zachary Walensa- on 8/3/16. // Copyright © 2016 -Zachary Walensa-. All rights reserved. // im

当购买升级时,我试图改变商店场景中SKSpriteNode的形象,我相信我使用该变量是正确的,但我认为我做得不对。谢谢你在advanced中的帮助,我已经尝试了一段时间来解决这个问题,但运气不好

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



            }


        }
    }


}

}
//shopsecene.swift
//最后一班
//
//由扎卡里·瓦伦萨于2016年8月3日创作。
//版权所有©2016-Zachary Walensa-。版权所有。
//
进口基金会
进口SpriteKit
var coinUpgrade=defaults.integer(forKey:“coinUpgradeSaved”)
var missileUpgrade=defaults.integer(forKey:“missileUpgradeSaved”)
课堂场景:SKScene{
var coinLabel=SKLabelNode(字体名称:“粗体字体”)
var missileUpgrades=SKSpriteNode(图像名为:“missile1”)
覆盖func didMove(到视图:SKView){
coinLabel.text=“硬币:\(硬币编号)”
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)
让background=SKSpriteNode(图像名为:“background”)
background.size=self.size
background.position=CGPoint(x:self.size.width/2,y:self.size.height/2)
background.zPosition=0
self.addChild(背景)
让mainMenu=SKLabelNode(字体名称:“粗体字体”)
Main Menu.text=“主菜单”
mainMenu.fontSize=100
main menu.fontColor=SKColor.darkGray
main menu.position=CGPoint(x:self.size.width*0.5,y:self.size.height*0.3)
main menu.zPosition=1
Main Menu.name=“主菜单”
self.addChild(主菜单)
let Life=SKSpriteNode(图像名为:“lifeButton”)
Life.position=CGPoint(x:self.size.width*0.3,y:self.size.height*0.8)
Life.zPosition=1
Life.name=“Life”
self.addChild(生活)
让coinUpgrades=SKSpriteNode(图像名为:“coinUpgrades”)
coin.position=CGPoint(x:self.size.width*0.5,y:self.size.height*0.8)
coin.zPosition=1
coins.name=“Coin”
self.addChild(coin升级)
missileUpgrades.position=CGPoint(x:self.size.width*0.8,y:self.size.height*0.8)
missileUpgrades.zPosition=1
missileUpgrades.name=“导弹”
self.addChild(missileUpgrades)
/*让coinLabel=SKLabelNode(字体名称:“粗体字体”)
coinLabel.text=“硬币:\(硬币编号)”
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)*/
}
覆盖func TouchesBegind(Touchs:Set,带有事件:UIEvent?){
用于触摸:触摸中的任何对象{
let pointOfTouch=触摸位置(in:self)
让NodeTapped=atPoint(触点)
如果nodeTapped.name==“主菜单”{
让sceneToMoveTo=MainMenuScene(大小:self.size)
sceneToMoveTo.scaleMode=self.scaleMode
让myTrasition=SKTransition.fade(持续时间:0.5)
self.view!.presentScene(sceneToMoveTo,transition:myTrasition)
}
如果nodeTapped.name==“生命”{
如果币号>=50{
寿命数+=1
币号-=50
defaults.set(coinNumber,forKey:“coinNumberSaved”)
defaults.set(lifeNumber,forKey:“lifeNumberSaved”)
coinLabel.text=“硬币:\(硬币编号)”
}
}
如果nodeTapped.name==“硬币”{
如果币号>=600{
币号-=600
defaults.set(coinNumber,forKey:“coinNumberSaved”)
coinUpgrade=1
defaults.set(coinUpgrade,forKey:“coinUpgradeSaved”)
coinLabel.text=“硬币:\(硬币编号)”
}
}
如果nodeTapped.name==“导弹”{
如果missileUpgrade==2{
导弹等级=1
defaults.set(missileUpgrade,forKey:“missileUpgradeSaved”)
如果missileUpgrade==1{
导弹等级=2
defaults.set(missileUpgrade,forKey:“missileUpgradeSaved”)
}
}
否则,如果missileUpgrade==0 | | coinNumber>=1400{
币号-=1400
defaults.set(coinNumber,forKey:“coinNumberSaved”)
导弹等级=2
defaults.set(missileUpgrade,forKey:“missileUpgradeSaved”)
coinLabel.text=“硬币:\(硬币编号)”
missileUpgrades=SKSpriteNode(图像名为:“导弹”)
}
}
}
}
}

有几种方法可以做到这一点:

1) 创建一个布尔变量,该变量在满足条件时切换为true。然后在更新功能中,您可以不断检查条件是否满足:

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")

请只张贴相关代码。在一个问题中看到这么多的代码会让人们远离阅读这个问题,因为它会成为一个麻烦