SpriteKit:获取Scene Children的独占锁定

时间:2014-03-17 18:14:31

标签: ios mono xamarin sprite-kit

我正在开发一款使用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;使用新级别对象不断更新的节点 如果我将逻辑置于单独的线程之外,它的工作完全正常,但每次生成关卡的新部分(因此是单独的线程)时,都会使游戏抖动。

0 个答案:

没有答案