2013-09-21 59 views
1

我使用繪圖函數來突出顯示插入到高分表中的分數,但是我發現當我嘗試離開高分層時,它使得我的應用程序滯後。我還是比較新的cocos2d,所以我想知道是否有更好的方法,所以它不會造成任何滯後。我發現如果我註釋掉這個函數沒有任何滯後。下面是我的代碼:繪圖函數導致應用程序滯後

- (void)draw { 
    [super draw]; 

    if(currentScorePosition < 0 || currentScore==0) return; 


    float w = 320.0f; 
    float h = 20.0f; 
    float x = (320.0f - w)/2.0f; 
    float y = 230.0f - currentScorePosition * h; 

    CGPoint vertices[4]; 


    vertices[0] = ccp(x, y); 
    vertices[1] = ccp(x+w, y); 
    vertices[2] = ccp(x+w, y+h); 
    vertices[3] = ccp(x, y+h); 


    CCDrawNode *draw = [[[CCDrawNode alloc] init] autorelease]; 

    [draw drawPolyWithVerts:vertices count:4 fillColor:ccc4f(0.5, 0.5, 0.8, 0.5) borderWidth:2.0 borderColor:ccc4f(0.0, 0.0, 0.0, 0.0)]; 

    [self addChild:draw z:0 ]; 

} 

回答

2

您正在每幀創建一個新的CCDrawNode。隨着時間的推移,這將減慢遊戲速度,因爲它必須繪製越來越多的繪製節點。

解決方法:先創建一個繪製節點並將其添加爲小孩。在伊娃中保留一個參考。只用這個單個繪製節點執行繪圖。

請注意CCDrawNode的繪製方法仍然是加法的。如果你想畫僅這一個多邊形和更新它隨着時間的推移,那麼你就必須繪製之前調用clear:

[theDrawNode clear]; 
[theDrawNode drawPolyWithVerts:vertices 
         count:4 
        fillColor:ccc4f(0.5, 0.5, 0.8, 0.5) 
        borderWidth:2.0 
        borderColor:ccc4f(0.0, 0.0, 0.0, 0.0)]; 

另注:您可以使用繪圖節點抽籤方法之外。事實上,如果你像你一樣運行代碼,繪製節點將不會被繪製直到下一幀,因此它總是滯後1幀。使用預定更新方法更新繪製節點。