2012-03-04 130 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)大照片更