我正在开发一款使用SpriteKit的iOS游戏 这些关卡是在游戏过程中动态生成的,我试图在一个单独的线程中执行。
当关卡中的新对象即将在屏幕上显示时,会使用scene.AddChild()
将它们添加到Scene的子集合中。
已移出屏幕的对象将使用scene.RemoveChild()
从Scene的子集合中删除。
问题是Children数组也被另一个线程访问(一个我无法控制的线程) 这会导致抛出异常,因为scene.Children数组正被多个线程突变:
MonoTouch.Foundation.MonoTouchException: Objective-C exception thrown.
Name: NSGenericException
Reason: *** Collection <__NSArrayM: 0x15e5bac0> was mutated while being enumerated.
at at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr)
是否有人知道锁定Scene的子集合的方法或确定其他线程是否已锁定它?
我可能想补充一点,孩子们没有直接添加到场景中,而是添加到场景中的一个对象上 所以有一个&#39; Level Layer&#39;使用新级别对象不断更新的节点 如果我将逻辑置于单独的线程之外,它的工作完全正常,但每次生成关卡的新部分(因此是单独的线程)时,都会使游戏抖动。