小编Vel*_*its的帖子

Sprite Kit中可重用的多线程实现

我正在开发一个Sprite Kit游戏,我需要做一些多线程来维持健康的fps.

在更新时,我调用一个函数来创建许多UIBezierPaths并使用C++静态库合并它们.

如果我有超过10个形状,帧速率会急剧下降,所以我决定尝试GCD并尝试使用单独的线程来解决问题.

我把它放在didMoveToView中:

queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
Run Code Online (Sandbox Code Playgroud)

在每个帧上调用的函数中,我称之为:

dispatch_async(queue,^(void){[self heavyCalculationsFunc];});
Run Code Online (Sandbox Code Playgroud)

对于那些了解GCD的人来说,很明显它会在每一帧上创建一个新线程,但对我来说还不清楚.

我的问题是,有没有办法重新使用我想在更新时调用的线程?

感谢您的帮助!

multithreading objective-c grand-central-dispatch ios sprite-kit

9
推荐指数
1
解决办法
1196
查看次数

在 spritekit 游戏中绘制动态贝塞尔曲线 - 最佳(性能)方法?

我不是 iOS 开发人员,我刚刚开始实现我的游戏,我在 Flash 中完成的,希望它使用本机环境会超级快。

该项目是一个 2d 游戏,有很多基于用户交互的动态贝塞尔曲线绘制。基本上我绘制动态斑点(变形虫类型的形状)。

首先我尝试了 Swift,它与 actionscript 非常相似,但结果证明,在 Xcode6 最终版本发布之前,Apple 将无法接受使用 Swift 构建的应用程序,因为我想在 9 月之前发布我的游戏,所以我去了目标 C 路线.

由于集成了物理引擎、精灵层次结构等,我想使用精灵套件。

我尝试使用 SKSphapeNode 进行绘图,但我很快意识到,它不适合我的需求。(如果笔画粗于 2 个像素,则无法绘制笔画,它有内存泄漏等)

因此,我使用了放入 UIImage 的 UIBezierPath,但我对性能不满意,因为我必须使用新的动态生成的贝塞尔曲线形状创建新的 UIImage。

这些是我目前找到的选项:

  1. SkShapeNode - 不适合我的游戏
  2. UIBezierPath - UIImage > 我必须每帧创建一个新的 UIImage,所以它很慢
  3. OpenGL - 我还没有尝试过,我不确定它是否可以与 Sprite 套件一起使用
  4. CALayer - 我目前正在尝试将它与 spritekit 集成,但我有一种感觉,我会遇到与 UIImage 方法相同的问题。

有没有人有任何想法,提示什么方法是最好的性能明智的?

提前谢谢你的帮助!

bezier drawing objective-c ios sprite-kit

2
推荐指数
1
解决办法
1164
查看次数

沿世界轴旋转

我正在开发一个 SceneKit 项目,我想在三个轴(世界轴)上旋转一个对象,但是一旦我旋转该对象,下一次旋转就会相对于新的旋转轴完成。

想象一个立方体,您应该能够使用相对于世界的三个按钮在绝对 x 轴、y 轴和 z 轴上旋转。

据我所知 SCNAction 有以下选项:

  • SCNAction.rotateTo(x:1.0,y:0.0,z:0.0,持续时间:0.5,usesShortestUnitArc:true)
  • SCNAction.rotateTo(x: 1.0, y: 0.0, z: 0.0, 持续时间: 0.5)
  • SCNAction.rotateBy(x: 1.0, y: 0.0, z: 0.0, 持续时间: 0.5)
  • SCNAction.rotate(通过:0.0,周围:SCNVector3,持续时间:0.5)
  • SCNAction.rotate(toAxisAngle:SCNVector4,持续时间:0.5)

不幸的是,这些都不是绝对的,它们都依赖于之前的轮换。

你知道有什么方法可以实现真正的绝对世界轴旋转吗?

我在这里先向您的帮助表示感谢!

ios scenekit swift

1
推荐指数
1
解决办法
1792
查看次数