2012-03-04 133 views
3

我正在为使用cocos2d的图形制作iPhone应用程序,并且向我的项目添加了4张图片,我想叠加以用作背景。我然后让他们这样CCSprites它们添加到应用程序...CCSprite降低性能

background.sun = [CCSprite spriteWithFile:@"SunLayer.png"]; 
    [self addChild:background.sun z:-1]; 

    background.mountain = [CCSprite spriteWithFile:@"MountainLayer.png"]; 
    [self addChild:background.mountain z:-1]; 

    background.tree = [CCSprite spriteWithFile:@"TreeLayer.png"]; 
    [self addChild:background.tree z:-1]; 

    background.hill = [CCSprite spriteWithFile:@"HillLayer.png"]; 
    [self addChild:background.hill z:-1]; 


    background.hill.position = ccp(s.width/2, s.height/2); 
    background.sun.position = ccp(s.width/2, s.height/2); 
    background.mountain.position = ccp(s.width/2, s.height/2); 
    background.tree.position = ccp(s.width/2, s.height/2); 

这使我的帧速率下降到30!从60!我怎么能保持一个好的帧率,但添加这些精灵!谢谢你

+0

这在它自己不应该降低帧率。你只调用一次这个代码吗?这些图像特别大吗? – 2012-03-04 18:17:23

+0

这些图像全部占据了整个屏幕 – 2012-03-04 19:29:23

回答

1

对于大图像,如果将它们添加到CCSpriteBatchNode而不是单独添加,您将显着提高帧速率。这样CPU只会对绘图引擎进行一次调用,而不是每个图像的单独调用。 CCSpriteBatchNode在测试中显示在应用于大图像(如背景图像)时具有最大优势。

+1

批处理对许多精灵尤其有用,而不是大精灵。 – phlebotinum 2012-03-05 03:06:30

+1

Stephen Itterheim(拼写?)对性能进行了一系列相当稳健的测试,因为它与批处理节点有关;检查他的网站。他惊讶地发现最重要的好处主要来自于处理大图像。这说得通;图像越大,绘图资源越多。通过去除几幅大图的绘图并合并成一幅,可以看到优势在于较小图像的好处;就像使用大图像引起的问题比通常使用小图像引起的问题更重要。 – johnbakers 2012-03-05 04:00:39

0

我有一段时间没有使用Cocos2d,但是你有没有尝试在添加精灵到图层之前设置位置?您是否确定只在初始化时添加一次?此外,图像的大小是什么?

+0

我只是在向图层添加精灵之前尝试设置位置,它没有改变任何东西。上面显示的代码在INIT方法中,所以它只能执行一次。所有4张图片都是320x480 – 2012-03-04 19:22:00

2

既然你们都在同一个z上添加它们,为什么不在photoshop或同等版本中添加它们并添加单个纹理?你是否需要淡化或以其他方式单独处理任何一个纹理?

此外,我经常发现模拟器上的FPS与我将在设备上正确获取的内容没有任何相似之处。当您怀疑性能问题时,我会建议您快速对设备进行快速测试,以评估问题是否真实。

+0

伟大的想法!但我需要以不同的方式移动每个精灵。这是一个像涂鸦跳跃一样的跳跃游戏,随着玩家上升,每一层缓慢下降,但前景会比回山时快得多。 – 2012-03-04 19:17:12

+1

我认为你正试图实现视差。你可以为此使用CCParallaxNode。只需使用系数将您的CCSprites添加到CCParallaxNode,而不是自己(CCLayer)。 – erkanyildiz 2012-03-04 23:06:08

2

发生这种情况是因为图像大。

我有完全相同的问题。我有960x640的4张图片。虽然其中3个大部分都是透明的,但我只是将他们的画布调整到960x640,以便将它们轻松放置在中央。

而这给了我低劣的25fps下降。 35fps而不是60.

我裁剪了3张图像到他们的内容边界,并使他们约960x50。 它的功能就像一个魅力,60fps再次。

+0

我的部分图片也是透明的,所以我会尝试修剪它们!然而,大多数是有色的,所以我看不到它大大提高了性能。 – 2012-03-04 19:18:52

+0

我裁剪了一下,它稍微提高了性能我现在45岁左右弹跳:)谢谢你想听到更多的想法 – 2012-03-04 19:29:03

+0

使用批量精灵和地图集可以帮助提高性能。 – erkanyildiz 2012-03-04 20:02:21

0

这是因为两个因素结合在一起:

a)透明度是非常昂贵用的PowerVR GPU

B)大照片更