Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在不同容器节点之间移动的节点的场景=nil_Ios_Objective C_Sprite Kit_Ios7.1 - Fatal编程技术网

Ios 在不同容器节点之间移动的节点的场景=nil

Ios 在不同容器节点之间移动的节点的场景=nil,ios,objective-c,sprite-kit,ios7.1,Ios,Objective C,Sprite Kit,Ios7.1,我在iOS 7.1的Sprite工具包中遇到了一个问题。它不会发生在iOS 8.1中,所以我相当肯定这是7.1中的一个bug,但我需要一个解决方法来保持兼容性 我正在从中队容器节点删除一个太空船精灵,然后将其添加回场景。我打开了场景中的showsPhysics,这样我就可以看到发生了什么。一旦飞船脱离中队,物理调试显示屏就会跳到各处,尽管飞船似乎处于正确的位置。不幸的是,这不是调试显示的错误,因为分离的physicsBody现在控制着行为。我可以把我自己的飞船撞进调试圈,调试圈就在屏幕的中间,与

我在iOS 7.1的Sprite工具包中遇到了一个问题。它不会发生在iOS 8.1中,所以我相当肯定这是7.1中的一个bug,但我需要一个解决方法来保持兼容性

我正在从中队容器节点删除一个太空船精灵,然后将其添加回场景。我打开了场景中的showsPhysics,这样我就可以看到发生了什么。一旦飞船脱离中队,物理调试显示屏就会跳到各处,尽管飞船似乎处于正确的位置。不幸的是,这不是调试显示的错误,因为分离的physicsBody现在控制着行为。我可以把我自己的飞船撞进调试圈,调试圈就在屏幕的中间,与分离的敌人保持距离

问题从这里开始:

-(void)breakFromSquadron{

CGPoint pos = [self positionInScene];
GameScene *scene = [self gameScene];

[self removeFromParent]; // removes ship from squadron (which is a child node of the node kWorldLayerShips, which is a child of the scene)

SKNode *layerNode = self.scene.layers[kWorldLayerShips]; 
[layerNode addChild:node]; // add ship directly as child of node layer 

self.position = pos;
}

当在调试器中通过这些步骤分析属性、检查父对象和场景时,所有内容都会检查出来,但在下一次更新中,如果我检查场景(
po self.scene
,在调试器中),结果为零

正如我所说,这在iOS 8.1中不是问题,只有7.1

[更新]
在苹果开发者支持的帮助下,我现在有了一个解决办法。从容器节点删除精灵时,设置一个(布尔)标志,指示需要删除精灵。在下一个更新循环中,检查是否设置了该标志,如果设置了,请使用[self-removeFromParent]将其删除。当它准备好添加回时设置另一个标志,然后在更新循环中再次添加回它。这些问题似乎是由回调块触发的这些操作引起的,因此它们发生在iOS 7的主更新循环之外。

我知道这可能不是一个理想的解决方案(更像是一个潜在的解决方法/黑客),但是,在将节点添加到layerNode之前,可以尝试为节点创建一个新的SKPhysicsBody。这似乎有点像是在结合phsyics body更改坐标系时出现了问题。也许8.x修复了这个问题,但我认为从一个新的phsyics主体开始可能是一个有效的解决方案。您是否也尝试过创建一个全新的节点?另外,在执行此切换时,该节点上是否有任何可能正在运行的SKActions?或者其他地方的物理实体?抓救命稻草:)您是否在这些节点上使用SKAction?事实上,一个新的节点解决了这个问题,这意味着仍然有一些残余物在与副本一起使用,对吗?不确定覆盖的是什么,但肯定会有问题。更具体地说,我感兴趣的是运行块操作,这些操作可能在块中具有与不同父节点不同的效果。在依赖于位置的动作进行时,切换坐标系也可能产生不利影响。