swift - 从 SpriteKit 中的另一个类或场景访问 var

标签 swift sprite-kit

我正在 SpriteKit 中构建一个游戏,其中包括一个玩家从 7 个选项中选择一个角色。场景 1 将包含 7 张图像。每张图像将代表一个角色。玩家将通过按下所选图像来选择角色,并且将呈现新的场景2。我希望所选角色图像出现在场景 2 中。我在场景 1 中保存了所选角色的数据,但是当呈现场景 2 时,它始终显示角色 1,而不是另一个。请告知从场景 1 访问 var 并将其带到场景 2 的正确代码行是什么。

import SpriteKit

class Scene1: SKScene {

var Player1 = SKSpriteNode()
var Player2 = SKSpriteNode()
var Player3 = SKSpriteNode()
var Player4 = SKSpriteNode()
var Player5 = SKSpriteNode()
var Player6 = SKSpriteNode()
var Player7 = SKSpriteNode()

var playerSelect1 = false
var playerSelect2 = false
var playerSelect3 = false
var playerSelect4 = false
var playerSelect5 = false
var playerSelect6 = false
var playerSelect7 = false

// in touches began..
if self.nodeAtPoint(location) == self.player1 {
        playerSelect1 = true
NSUserDefaults.standardUserDefaults().setBool(true, forKey:"playerSelect1")

// then i present scene2

} else if self.nodeAtPoint(location) == self.player2 {
        playerSelect2 = true
NSUserDefaults.standardUserDefaults().setBool(true, forKey:"playerSelect2")

//then i present scene2

} else if self.nodeAtPoint(location) == self.player3 {
        playerSelect3 = true
NSUserDefaults.standardUserDefaults().setBool(true, forKey:"playerSelect3")

//then i present scene2

} else if self.nodeAtPoint(location) == self.player4 {
        playerSelect4 = true
NSUserDefaults.standardUserDefaults().setBool(true, forKey:"playerSelect4")

//then i present scene2
// i didn't list all 7 characters to make code shorter


class Scene2: SKScene {
var playerSelected: Scene1()

// did move to view
var character1 = SKSpriteNode()
var character2 = SKSpriteNode()
var character3 = SKSpriteNode()
var character4 = SKSpriteNode()

//grab the selection value
let playerSelect1 =          NSUserDefaults.standardUserDefaults().boolForKey("playerSelect1")

let playerSelect2 =          NSUserDefaults.standardUserDefaults().boolForKey("playerSelect2")

let playerSelect3 =          NSUserDefaults.standardUserDefaults().boolForKey("playerSelect3")

let playerSelect4 =          NSUserDefaults.standardUserDefaults().boolForKey("playerSelect4")

if playerSelect1 == true {
self.addChild(character1)
} else if playerSelect2 == true {
self.addChild(character2)
} else if playerSelect3 == true {
self.addChild(character3)
} else if playerSelect4 == true {
self.addChild(character4)
}
}

最佳答案

关于您的问题,您可以采用多种方法来实现您想要的目标。现在,我个人仅在需要与今天的扩展进行通信时才使用 NSUserDefaults。您可能还想稍后保存数据文件,所以我想到了这一点:

class Settings: NSObject { // NSCoding in case you want to save your data
    var playerGender: [Bool]! = [Bool]()
    func encodeWithCoder(aCoder: NSCoder!) {
        aCoder.encodeObject(playerGender, forKey: "playerGender")
    }
    init(coder aDecoder: NSCoder!) {
        playerGender = aDecoder.decodeObjectForKey("playerGender") as! [Bool]
    }
    override init() {
        super.init()
        self.playerGender = Array(count:7, repeatedValue:false)
    }
}
class GameManager: NSObject {
    static let sharedInstance = GameManager()
    var settings : Settings! = Settings()
}
class Scene1: SKScene {
    let gameManager = GameManager.sharedInstance
    var player : [SKSpriteNode]?
    override func didMoveToView(view: SKView) {
        // in touches began..
        if self.nodeAtPoint(location) == self.player1 {
            gameManager.settings.playerGender[0] = true
        }
    }
}
class Scene2: SKScene {
    let gameManager = GameManager.sharedInstance
    var character : [SKSpriteNode]?
    override func didMoveToView(view: SKView) {
        //grab the selection value
        let playerSelect1 = gameManager.settings.playerGender[0] //it's true
    }
}

说明: Settings 是一个类,您可以在其中编写游戏设置,将来您还可以将属性值保存到文件中。

GameManager 是一个共享实例,您可以在任何地方调用它。

关于swift - 从 SpriteKit 中的另一个类或场景访问 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38546552/

相关文章:

swift - 在 Swift 中为 Tensorflow 创建随机张量

ios - Xcode 10.2 中的 Realm Swift - Swift 5.0 编译器无法导入错误 : Module compiled with Swift 4. 2

ios - Swift - 如何获得视频维度?

ios - SKPhysicsBody 对象碰撞未对齐

swift - 使用 3 个输入值计算体积时遇到问题。

ios swift 3 - 打印机蓝牙

ios - 如何在 sprite kit 中创建进度条?

ios - 在 nodejs 上运行的 sprite-kit 游戏

ios - 在 SceneKit 中使一个对象绕另一个对象运行

ios - 从用户的照片库导入图片并将其作为圆形图像添加到 SKScene?