SpriteKit如何从另一个场景请求数据
How to request data from another scene in SpriteKit
我有 2 个 SKScene
。第一个场景有 2 个按钮:男性玩家按钮和女性玩家按钮。第二个场景有2张隐藏图片:一张男玩家图和一张女玩家图
如果在 Scene1
中选择了男性玩家,我想在 Scene2
中显示男性玩家的图像,但在 SKScene
之间传递数据时遇到问题。我在 Swift 中使用 Sprite Kit 和编程。请指教
这是我目前尝试过的方法:
// Scene1:
import SpriteKit
class Scene1: SKScene {
var malePlayer = SKSpriteNode()
var femalePlayer = SKSpriteNode()
var maleSelect = false
var femaleSelect = false
// in touches began..
if self.nodeAtPoint(location) == self.malePlayer {
maleSelect = true
// then i present scene2
} else if self.nodeAtPoint(location) == self.femalePlayer {
femaleSelect = true
//then i present scene2
// in scene 2:
class Scene2: SKScene {
var playerSelected: Scene1()
// did move to view
var boy = SKSpriteNode()
var girl = SKSpriteNode()
if self.playerSelected.maleSelect == true {
self.addChild(boy)
} else if self.playerSelected.femaleSelect == true {
self.addChild(girl)
}
场景2中的代码:
var playerSelected: Scene1()
创建场景 1 class 的新实例,它不提供 link 回到原始场景 1。要访问场景 1 的属性,您需要传递对它的引用场景 2.
有几种方法可以做到这一点。这是一个使用 NSUserDefaults
的示例。使它成为一个不错的选择的一个原因是即使在应用程序关闭后选择也会持续存在,并且可以在下次打开应用程序时重新加载。
要保存选择,请使用以下代码:
if self.nodeAtPoint(location) == self.malePlayer {
//save the selection in NSUserDefaults
NSUserDefaults.standardUserDefaults().setBool(true, forKey:"maleSelected")
//present next scene
} else if self.nodeAtPoint(location) == self.femalePlayer {
//save the selection
NSUserDefaults.standardUserDefaults().setBool(false, forKey:"maleSelected")
//present next scene
}
该值现在保存在本地存储中。当您需要在其他场景中访问选择时,从 NSUserDefaults
:
中获取值
所以 Scene2
可能看起来像这样:
class Scene2: SKScene {
var playerSelected: Scene1()
// did move to view
var boy = SKSpriteNode()
var girl = SKSpriteNode()
//grab the selection value
let maleSelected = NSUserDefaults.standardUserDefaults().boolForKey("maleSelected")
if maleSelected == true {
self.addChild(boy)
} else {
self.addChild(girl)
}
}
我有 2 个 SKScene
。第一个场景有 2 个按钮:男性玩家按钮和女性玩家按钮。第二个场景有2张隐藏图片:一张男玩家图和一张女玩家图
如果在 Scene1
中选择了男性玩家,我想在 Scene2
中显示男性玩家的图像,但在 SKScene
之间传递数据时遇到问题。我在 Swift 中使用 Sprite Kit 和编程。请指教
这是我目前尝试过的方法:
// Scene1:
import SpriteKit
class Scene1: SKScene {
var malePlayer = SKSpriteNode()
var femalePlayer = SKSpriteNode()
var maleSelect = false
var femaleSelect = false
// in touches began..
if self.nodeAtPoint(location) == self.malePlayer {
maleSelect = true
// then i present scene2
} else if self.nodeAtPoint(location) == self.femalePlayer {
femaleSelect = true
//then i present scene2
// in scene 2:
class Scene2: SKScene {
var playerSelected: Scene1()
// did move to view
var boy = SKSpriteNode()
var girl = SKSpriteNode()
if self.playerSelected.maleSelect == true {
self.addChild(boy)
} else if self.playerSelected.femaleSelect == true {
self.addChild(girl)
}
场景2中的代码:
var playerSelected: Scene1()
创建场景 1 class 的新实例,它不提供 link 回到原始场景 1。要访问场景 1 的属性,您需要传递对它的引用场景 2.
有几种方法可以做到这一点。这是一个使用 NSUserDefaults
的示例。使它成为一个不错的选择的一个原因是即使在应用程序关闭后选择也会持续存在,并且可以在下次打开应用程序时重新加载。
要保存选择,请使用以下代码:
if self.nodeAtPoint(location) == self.malePlayer {
//save the selection in NSUserDefaults
NSUserDefaults.standardUserDefaults().setBool(true, forKey:"maleSelected")
//present next scene
} else if self.nodeAtPoint(location) == self.femalePlayer {
//save the selection
NSUserDefaults.standardUserDefaults().setBool(false, forKey:"maleSelected")
//present next scene
}
该值现在保存在本地存储中。当您需要在其他场景中访问选择时,从 NSUserDefaults
:
所以 Scene2
可能看起来像这样:
class Scene2: SKScene {
var playerSelected: Scene1()
// did move to view
var boy = SKSpriteNode()
var girl = SKSpriteNode()
//grab the selection value
let maleSelected = NSUserDefaults.standardUserDefaults().boolForKey("maleSelected")
if maleSelected == true {
self.addChild(boy)
} else {
self.addChild(girl)
}
}