我正在尝试在3个不同的场景上显示“货币”值,并且它显示在GameScene上,而不显示在GameOverScene或ShopScene上。
这是正在运行的GameScene的相关代码:
func adjustMoney(by points: Int){
var money = UserDefaults().integer(forKey: "moneyscore")
money += points
MoneyLabel.text = "Money = " + UserDefaults().integer(forKey: "moneyscore").description
UserDefaults().set(money, forKey: "moneyscore")
}
func projectileDidCollideWithMonster(projectile: SKSpriteNode, monster: SKSpriteNode) {
print("Hit")
projectile.removeFromParent()
monster.removeFromParent()
monstersDestroyed += 1
adjustScore(by: 1)
adjustMoney(by: 2)
这是其他场景中的总代码(只有ShopScene,与其他场景中的相同):
import Foundation
import SpriteKit
var welcomeLabel: SKLabelNode!
class ShopScene: SKScene {
var background = SKSpriteNode(imageNamed: "background")
override func didMove(to view: SKView) {
background.zPosition = -1
background.position = CGPoint(x: frame.size.width / 2, y: frame.size.height / 2)
addChild(background) welcomeLabel = SKLabelNode(fontNamed: "Chalkduster")
welcomeLabel.text = "Welcome to the shop!"
welcomeLabel.fontSize = 40
welcomeLabel.fontColor = SKColor.black
welcomeLabel.position = CGPoint(x: size.width/2, y: size.height/1.2)
addChild(welcomeLabel)
MoneyLabel = SKLabelNode(fontNamed: "Chalkduster")
MoneyLabel.text = "Money = \(money)"
MoneyLabel.fontSize = 20
MoneyLabel.fontColor = SKColor.black
MoneyLabel.position = CGPoint(x: size.width/6.2, y: size.height/1.35)
addChild(MoneyLabel)
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
let gameScene = GameScene(size: self.size)
gameScene.scaleMode = .aspectFill
self.view?.presentScene(gameScene, transition: SKTransition.doorsCloseHorizontal(withDuration: 1.0))
}
}
但是它只说钱= 0
----我不确定这是否有任何意义,但是在我的“投射物”和“怪物”首先碰撞每场比赛之前,我所有的高分,高分和金钱值均为0,然后他们回到了自己的状态。保存的值,除了得分明显为0。得分是唯一未保存且确实移至GameOverScene
的值。
答案 0 :(得分:-1)
在更新用户默认值(钱)时,您需要访问 UserDefaults()。integer(forKey:“ moneyscore”)才能在GameOverScene或ShopScene类中使用它。
这实际上仅针对您的特定情况。另一方面,如果您有兴趣传递不同类中的数据(如果它们具有视图,则可以在屏幕上提及它们),则可以采用不同的方法。您可以按照link进行参考。