我在一本书中完成了一个breakout game教程,但是这个20x20像素图像的球正在跳帧并且移动得不是很顺利。模拟器以及iPhone 4S(真实的东西)就是这种情况。代码未使用NSTimer
(可能较慢),但使用CADisplayLink
和UIImageView setFrame
来制作动画。
iOS上的Core Animation是不是非常适合开发动画类型的游戏?说是否是
游戏对于这些类型的游戏,Core Animation真的适合写作(2)吗?对于(1),(3)和(4),Cocos2D或OpenGL ES更适合做这项工作。而Cocos2D和OpenGL ES的性能非常接近。这是真的吗?
答案 0 :(得分:3)
Cocos2D经常被看作是因为它易于编程常见的游戏逻辑,如碰撞检测和精灵动画,逐帧,缩放和其他在游戏开发中非常常见的过程,在这些过程中你将多个动画串在一起,然后组合,对它们进行排序,进行回调等等。这是引擎的一大好处。
然而,表现是另一回事。 Cocos提供批处理节点,它将所有图形元素组合成一个OpenGL调用,而不是在每个帧中分别“绘制”到屏幕上;这可以显着提高性能,尤其是对于大型图形。如果你有跳帧,我想知道Cocos中的批量精灵是否会成为缺失的链接。
Core Animation给我留下了非常深刻的印象,并希望它能够在游戏中保持自己的性能问题。我的理解是CA和Cocos一样,也是建立在OpenGL ES之上的,所以我希望它可以在两者中取得好成绩。可能在Cocos中这样做更容易,因为它已经在游戏开发内部进行了设计和优化。
答案 1 :(得分:0)
如果您在使用2D应用程序时遇到性能问题,这可能是由于缺乏对如何从CoreGraphics获得最有效结果的理解,而不是切换到OpenGL将会解决的问题。 2D游戏可以与CoreGraphics一起使用,您只需要从正确的方法开始。首先,您不应该在每个CADisplayLink回调上再次渲染整个视图。而是,设置包含多个CALayer对象的UIView。像这样设置图层:CALayer.contents =(id)cgImage然后让系统在x,y或动画元素改变时处理它。您只需要定位元素并定义移动元素的动画。通过这种方法,系统将在幕后将动画图像缓存在图形卡上,并使用GPU操作重绘。