Sprite kit 在spritekit中使用removeFromParent时删除了错误的节点

Sprite kit 在spritekit中使用removeFromParent时删除了错误的节点,sprite-kit,Sprite Kit,我希望一个节点在与某个对象接触后从父节点中删除,但该节点是连续生成的,同时在屏幕上同时显示多个相同的节点。问题是,无论何时节点进行联系并调用removeFromParent,它都不会被删除,但另一个尚未进行联系的节点会被删除。我想知道我能做些什么来确保被删除的节点是进行联系的节点,而不是相同类型的节点。而不是将节点添加到self as child。将它们添加到您创建的另一个节点。然后,您可以使用这行代码删除较大节点中的所有节点: bigNode.addChild(smallNode) //Add

我希望一个节点在与某个对象接触后从父节点中删除,但该节点是连续生成的,同时在屏幕上同时显示多个相同的节点。问题是,无论何时节点进行联系并调用removeFromParent,它都不会被删除,但另一个尚未进行联系的节点会被删除。我想知道我能做些什么来确保被删除的节点是进行联系的节点,而不是相同类型的节点。

而不是将节点添加到self as child。将它们添加到您创建的另一个节点。然后,您可以使用这行代码删除较大节点中的所有节点:

bigNode.addChild(smallNode) //Add smallNode to bigNode instead of self
bigNode.removeAllChildren() //Removes all of the smallNodes since they all are children of bigNode

您需要一种使每个实例唯一的方法。一种方法是为每个节点实例指定一个唯一的名称。首先,您需要创建一个计数器:

@property (nonatomic) int myCounter;
然后将计数器用作节点名称的一部分:

myCounter++;
myNode.name = [NSString stringWithFormat:@"myNode-%i",myCounter];

做一些调试。使用NSLogs查找哪些节点有联系人。如果没有代码和具体细节,我们无法解决这个问题。当我输入NSLog时,它会打印出条的名称,因为我通过名称而不是contactbitmasks检测联系人。节点正在响应联系人,只是删除了错误的节点。您是否认为这可能是因为我通过contact.bodyA.node.name检测到联系人?