2016-07-20 59 views
1

我有2 SKScene秒。第一个场景有2个按钮:男性玩家按钮和女性玩家按钮。第二个场景有2个隐藏的图像:男性球员图像和女性球员图像。如何从另一个场景要求数据SpriteKit

如果在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) 
} 
+0

你尝试过什么了吗?如果是这样,请张贴相关代码。没有提及你使用的是什么语言。 Objective-C的?迅速? – jsondwyer

+0

我编辑的代码更好的理解,这是sprite套件。场景2给出,但球员没有出现在现场2 – viktorm

回答

1

有几种方法可以做到这一点。以下是一个使用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) 
} 
} 
0

在场景2的代码:

var playerSelected: Scene1() 

创建场景1类的新实例,它并没有提供一个链接你原来的场景1.要进入现场1的属性,你需要参考从现场传递给它2

+0

请指教一下是代码从现场2传递到现场1.参考线谢谢 – viktorm

+0

@viktorm这将在很大程度上取决于你的代码的整体结构。场景2可能不应该从场景1呈现,而应该从更高层次的视图控制器呈现。事实上,我会质疑为什么你有两个场景 - 为什么不让玩家在同一场景的不同位置选择精灵?我认为你需要重新审视你的代码的结构以及对象如何与对方进行交互,否则你将会把自己绑在循环引用中。 –

相关问题