SpriteKit:在场景之间传递数据

Alf*_*nso 8 iphone ios ios7 sprite-kit

我试图在SpriteKit中的场景"SKScene"之间传递数据.例如,我想将分数从A级传递到B级.

也许解决方案是归档,但我想实现更简单的东西,就像我们使用视图控制器一样.

在这方面的任何线索将非常感谢.

doc*_*tor 15

如果您要将分数传递到许多不同的场景,您可能希望将其存储在NSUserDefaults一些可访问的存储机制中.但是,如果您希望在SpriteKit对象之间传递数据,则每个SKNode(包括SKScene)都会调用一个字典属性userData,您可以将其用于您想要的任何内容.以下是如何在场景之间传递分数的示例:

 - (void)changeScene
 {
      SKView *spriteView = (SKView *) self.view;
      SKScene *currentScene = [spriteView scene];
      SKScene *newScene = [MySceneClass scene];
      [newScene.userData setObject:[currentScene.userData objectForKey:@"score"] forKey:@"score"];
      [spriteView presentScene:newScene];

 }
Run Code Online (Sandbox Code Playgroud)


Lea*_*s2D 6

将分数存储在视图控制器实例中,或者将SKView子类化并将其存储在那里.这将保留视图生命周期内的任何对象.

如果您需要在应用重启之间保留分数,请使用NSUserDefaults.

Kobold Kit实际上使这样的东西变得容易,没有自定义子类.视图具有(并且任何节点都可以拥有)一个KKModel对象,该对象是两个整数类型(float,int等等via KKMutableNumber)和任意对象的键/值存储.

因此,您可以通过将其绑定到视图来持久化并从任何节点访问您的highscores对象:

[self.kkView.model setObject:highscores forKey:@"highscores"];
Run Code Online (Sandbox Code Playgroud)

kkView属性是写入的简写(KKView*)self.view.

完全没有必要使用或使用单身受益的对象,它们的寿命绑要么到现场或视图.它们属于场景或视图,时期.