【发布时间】:2014-04-18 03:06:30
【问题描述】:
我的应用程序是一款游戏,它包含一个 CADisplayLink 计时器,该计时器调用一个函数,该函数指示每帧屏幕上的各种对象对 UIView setCenter: 进行大约 20 次调用。
时间分析,这约占游戏中所有活动的 30%,并大大降低了旧设备(低于第 5 代 ipod touch 或 iphone)的性能。
我可以使用任何轻量级、低开销的替代方案来每帧在屏幕上移动对象(特别是 UIViews)吗?
编辑:
澄清一下,这些UIViews 的center 属性必须在每一帧中设置。我的游戏中有许多代表地面的图块。它们在屏幕上滑动,只是被新的瓷砖取代。在摆弄代码几个小时以将UIViews 更改为CAlayers 之后,我让它完全没有性能提升。肯定有更好的方法来做到这一点。
一些代码可以大致了解正在发生的事情:
for(Object* o in gameController.entities){
[o step:curTimeMS];
}
gameController,正如人们所想的那样,是一个负责主要游戏功能的类。它包括其实体列表,即屏幕上的所有对象。每个实体上的 step 方法是一个虚函数,因此它特定于每个实体 - curTimeMS 变量只是一个时间戳,因此对象可以计算其增量位置。实质上,每个实体每帧都会更新其layer.position 属性,并以适当的速度在屏幕上移动。
【问题讨论】:
-
既然是游戏,你检查过SpriteKit了吗?这是一个很棒的框架,有趣且易于使用。
-
@Winston 同意,但我认为他想在早期的系统上运行。
-
是的,没错,因为他在他的问题上提到了第 5 代 ipod touch 或 iPhone。
-
@Winston 正如马特所说,我确实想支持早期的系统,但 SpriteKit 似乎是未来的好方法,感谢您的建议:)
-
你会玩得很开心的。
标签: ios iphone objective-c performance uiview