将 skspritenode 位置保存到 plist 不起作用

Posted

技术标签:

【中文标题】将 skspritenode 位置保存到 plist 不起作用【英文标题】:Saving skspritenode position to plist doesn't work 【发布时间】:2015-10-13 14:56:06 【问题描述】:

我所做的很简单,我正在尝试将精灵节点坐标保存到 plist。如果我手动强制输入静态值,它可以正常工作,但如果我尝试将 node.position.x 放入 plist,它就不起作用。我当然在使用 writeToFile 之前将 node.position.x 放入一个 NSNumber。

另一个注意事项是我从以下位置调用此函数:- (void)applicationWillResignActive:(UIApplication *)application

appdelegate 的功能。

查看控制台,所有节点位置都显示正常,只是没有写入 plist。如果我在其中强制输入 6 或 10 之类的数字,或者它写得很好。

任何帮助将不胜感激。

for (SKSpriteNode* node in ar)
            NSNumber* x = [NSNumber numberWithInt:(int)node.position.x];
            NSNumber* y = [NSNumber numberWithInt:(int)node.position.y];
            [node_locs addObject:[[NSMutableDictionary alloc] initWithObjectsAndKeys:x,@"X",y,@"Y",nil]];
        

然后我执行我知道可行的通常 writeToFile。

【问题讨论】:

如果您认为问题在于应用程序没有足够的时间将内容写入磁盘,请尝试创建一个 background task 来处理它。 我刚刚发现 applicationWillResignActive 方法被调用了两次,第二次节点位置被旧的 x 和 y 位置覆盖。我似乎有一个问题,即我的 viewDidLoad 方法从我的 skscene 的视图控制器中被多次调用,就此而言,skscene didMoveToView 方法也被多次调用。这可能是什么原因造成的? 老实说,我什至不确定加载方法与辞职委托方法有何关系,但通常viewDidLoad 可以在同一时间调用两次,如果您呈现两个视图不同的控制器具有相同的配置。尝试调试它并在这两个调用中比较视图控制器。 感谢您的意见。我试试看。 【参考方案1】:

好的,这就是我的问题。当我调用 NSNotificationCenter 方法时,我保存坐标的方法被调用了两次。我不知道为什么会这样,但这很烦人。如果此时解决了我的问题。感谢大佬的回复。

【讨论】:

以上是关于将 skspritenode 位置保存到 plist 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

将任意信息附加到 SKSpriteNode

移动节点后,SKSpriteNode的X,Y坐标不会更改

未检测到 SKSpriteNode 触摸

通过名称 Swift 2、Xcode 7 获取 SKSpriteNode

SKSpriteNode 的循环位置

如何将一组skspritenodes一起移动