消除SKTexture创建的GCD资源争用

时间:2016-07-28 03:40:49

标签: cocoa sprite-kit uikit grand-central-dispatch cifilter

我正在为四个玩家开发SpriteKit网络游戏。我必须使用GCD调度队列,因为我在Game.xcassets包中使用了唯一的图像资源集合,如果我不使用GCD,网络就会被阻止并停止并崩溃游戏。 GCD队列使这个问题没有问题,除了我遇到的另一个问题是:

我们说我创建了一个有四个玩家的游戏,他们都连接到被选为服务器的玩家。复制的SKTextures和动画帧的创建大约需要10秒才能在iPad 2和iPad Pro 12上进行。它大概2-3秒。

如果他们都使用了使用同一组ASSETS的类似角色,我必须加载一个角色,让GCD完成他,然后加载玩家2的角色,然后让GCD完成,然后加载玩家3,然后是4,等待GCD完全完成每个角色的SKTextures和动画帧的构建,然后继续下一个。

我不能说"每个人,这里都是你需要创建它们的所有角色,因为CIFilters抛出一个BAD_EXEC,因为其他一些角色通常使用其中一个某些角色想要使用的图像,即RESOURCE CONTENTION,(对于资源包中的图像?该死的!)

我的问题是:

有没有办法将资源标记为许多人自由使用的资源?或发布某种" copy"当我使用CIFilters时,资源被释放给其他人使用它们?

纠正这种情况并使GCD过度加速的唯一愚蠢方法是为每个玩家的创作时间创建一组图像资源。

// So "guy_rightArm_step0.png" becomes:

guy0_rightArm_step0.png
guy1_rightArm_step0.png
guy2_rightArm_step0.png
guy3_rightArm_step0.png
guy4_rightArm_step0.png

并将它们放在Game.xcassets中的正确位置(如果需要,他们自己为每个玩家),即我必须创建五批图像资源(因为只有服务器选项,对于其他4个玩家)。

这种方式当我发出服务器MSG表示构建p1&#39的char,p2' s char,p3' s char,p4' s时,GCD使用存储的图像组在本地为每个角色操作彼此的客户端设备。

听起来很疯狂,但这是没有资源争用和没有CIFilter图像崩溃的角色创建的唯一方法。

0 个答案:

没有答案