2013-01-20 44 views
1

我必須運行一個19秒的動畫與466幀每幀是「1024x768」我使用zwoptex來製作一個精靈表,但工作表是「4096 X 4096」,它只能容納15幀。在動畫中的混亂2d

我已經制作了多張單張紙,準確地說是30張,並且與他們一起運行動畫,但它有一些混亂,我只用了2張或3張相當平滑的紙張。

這裏是我的代碼

cache=[CCSpriteFrameCache sharedSpriteFrameCache]; 
    [cache addSpriteFramesWithFile:@"Set_1.plist"]; 

    cache1=[CCSpriteFrameCache sharedSpriteFrameCache]; 
    [cache1 addSpriteFramesWithFile:@"Set_2.plist"]; 

    cache2=[CCSpriteFrameCache sharedSpriteFrameCache]; 
    [cache2 addSpriteFramesWithFile:@"Set_3.plist"]; 

    cache3=[CCSpriteFrameCache sharedSpriteFrameCache]; 
    [cache3 addSpriteFramesWithFile:@"Set_4.plist"]; 

    cache4=[CCSpriteFrameCache sharedSpriteFrameCache]; 
    [cache4 addSpriteFramesWithFile:@"Set_5.plist"]; 

    cache5=[CCSpriteFrameCache sharedSpriteFrameCache]; 
    [cache5 addSpriteFramesWithFile:@"Set_6.plist"]; 

    cache6=[CCSpriteFrameCache sharedSpriteFrameCache]; 
    [cache6 addSpriteFramesWithFile:@"Set_7.plist"]; 

    cache7=[CCSpriteFrameCache sharedSpriteFrameCache]; 
    [cache7 addSpriteFramesWithFile:@"Set_8.plist"]; 

    cache8=[CCSpriteFrameCache sharedSpriteFrameCache]; 
    [cache8 addSpriteFramesWithFile:@"Set_9.plist"]; 

    cache9=[CCSpriteFrameCache sharedSpriteFrameCache]; 
    [cache9 addSpriteFramesWithFile:@"Set_10.plist"]; 

    cache10=[CCSpriteFrameCache sharedSpriteFrameCache]; 
    [cache10 addSpriteFramesWithFile:@"Set_11.plist"]; 

    cache11=[CCSpriteFrameCache sharedSpriteFrameCache]; 
    [cache11 addSpriteFramesWithFile:@"Set_12.plist"]; 

    cache12=[CCSpriteFrameCache sharedSpriteFrameCache]; 
    [cache12 addSpriteFramesWithFile:@"Set_13.plist"]; 

    cache13=[CCSpriteFrameCache sharedSpriteFrameCache]; 
    [cache13 addSpriteFramesWithFile:@"Set_14.plist"]; 

    cache14=[CCSpriteFrameCache sharedSpriteFrameCache]; 
    [cache14 addSpriteFramesWithFile:@"Set_15.plist"]; 

    cache15=[CCSpriteFrameCache sharedSpriteFrameCache]; 
    [cache15 addSpriteFramesWithFile:@"Set_16.plist"]; 




    equ=[CCSprite spriteWithFile:@"m1.png"]; 
    [self addChild:equ z:5 tag:90 ]; 
    equ.anchorPoint=ccp(0, 0); 
    equ.position=ccp(0, 0); 

    NSMutableArray *framesArray=[NSMutableArray array]; 
    NSMutableArray *framesArray1=[NSMutableArray array]; 
    NSMutableArray *framesArray2=[NSMutableArray array]; 
    NSMutableArray *framesArray3=[NSMutableArray array]; 
    NSMutableArray *framesArray4=[NSMutableArray array]; 
    NSMutableArray *framesArray5=[NSMutableArray array]; 
    NSMutableArray *framesArray6=[NSMutableArray array]; 
    NSMutableArray *framesArray7=[NSMutableArray array]; 
    NSMutableArray *framesArray8=[NSMutableArray array]; 
    NSMutableArray *framesArray9=[NSMutableArray array]; 
    NSMutableArray *framesArray10=[NSMutableArray array]; 
    NSMutableArray *framesArray11=[NSMutableArray array]; 
    NSMutableArray *framesArray12=[NSMutableArray array]; 
    NSMutableArray *framesArray13=[NSMutableArray array]; 
    NSMutableArray *framesArray14=[NSMutableArray array]; 
    // NSMutableArray *framesArray15=[NSMutableArray array]; 

    for (int i=1; i<=15; i++) { 
     NSString *frameName=[NSString stringWithFormat:@"m%d.png", i]; 
     NSString *frameName1=[NSString stringWithFormat:@"m%d.png", i+(15*1)]; 
     NSString *frameName2=[NSString stringWithFormat:@"m%d.png", i+(15*2)]; 
     NSString *frameName3=[NSString stringWithFormat:@"m%d.png", i+(15*3)]; 
     NSString *frameName4=[NSString stringWithFormat:@"m%d.png", i+(15*4)]; 
     NSString *frameName5=[NSString stringWithFormat:@"m%d.png", i+(15*5)]; 
     NSString *frameName6=[NSString stringWithFormat:@"m%d.png", i+(15*6)]; 
     NSString *frameName7=[NSString stringWithFormat:@"m%d.png", i+(15*7)]; 
     NSString *frameName8=[NSString stringWithFormat:@"m%d.png", i+(15*8)]; 
     NSString *frameName9=[NSString stringWithFormat:@"m%d.png", i+(15*9)]; 
     NSString *frameName10=[NSString stringWithFormat:@"m%d.png", i+(15*10)]; 
     NSString *frameName11=[NSString stringWithFormat:@"m%d.png", i+(15*11)]; 
     NSString *frameName12=[NSString stringWithFormat:@"m%d.png", i+(15*12)]; 
     NSString *frameName13=[NSString stringWithFormat:@"m%d.png", i+(15*13)]; 
     NSString *frameName14=[NSString stringWithFormat:@"m%d.png", i+(15*14)]; 


     id frameObject=[cache spriteFrameByName:frameName]; 
     id frameObject1=[cache1 spriteFrameByName:frameName1]; 
     id frameObject2=[cache2 spriteFrameByName:frameName2]; 
     id frameObject3=[cache3 spriteFrameByName:frameName3]; 
     id frameObject4=[cache4 spriteFrameByName:frameName4]; 
     id frameObject5=[cache5 spriteFrameByName:frameName5]; 
     id frameObject6=[cache6 spriteFrameByName:frameName6]; 
     id frameObject7=[cache7 spriteFrameByName:frameName7]; 
     id frameObject8=[cache8 spriteFrameByName:frameName8]; 
     id frameObject9=[cache9 spriteFrameByName:frameName9]; 
     id frameObject10=[cache10 spriteFrameByName:frameName10]; 
     id frameObject11=[cache11 spriteFrameByName:frameName11]; 
     id frameObject12=[cache12 spriteFrameByName:frameName12]; 
     id frameObject13=[cache13 spriteFrameByName:frameName13]; 
     id frameObject14=[cache14 spriteFrameByName:frameName14]; 



     [framesArray addObject:frameObject]; 
     [framesArray1 addObject:frameObject1]; 
     [framesArray2 addObject:frameObject2]; 
     [framesArray3 addObject:frameObject3]; 
     [framesArray4 addObject:frameObject4]; 
     [framesArray5 addObject:frameObject5]; 
     [framesArray6 addObject:frameObject6]; 
     [framesArray7 addObject:frameObject7]; 
     [framesArray8 addObject:frameObject8]; 
     [framesArray9 addObject:frameObject9]; 
     [framesArray10 addObject:frameObject10]; 
     [framesArray11 addObject:frameObject11]; 
     [framesArray12 addObject:frameObject12]; 
     [framesArray13 addObject:frameObject13]; 
     [framesArray14 addObject:frameObject14]; 


    } 

    id animObject=[CCAnimation animationWithSpriteFrames:framesArray delay:0.0407]; 
    id animObject1=[CCAnimation animationWithSpriteFrames:framesArray1 delay:0.0407]; 
    id animObject2=[CCAnimation animationWithSpriteFrames:framesArray2 delay:0.0407]; 
    id animObject3=[CCAnimation animationWithSpriteFrames:framesArray3 delay:0.0407]; 
    id animObject4=[CCAnimation animationWithSpriteFrames:framesArray4 delay:0.0407]; 
    id animObject5=[CCAnimation animationWithSpriteFrames:framesArray5 delay:0.0407]; 
    id animObject6=[CCAnimation animationWithSpriteFrames:framesArray6 delay:0.0407]; 
    id animObject7=[CCAnimation animationWithSpriteFrames:framesArray7 delay:0.0407]; 
    id animObject8=[CCAnimation animationWithSpriteFrames:framesArray8 delay:0.0407]; 
    id animObject9=[CCAnimation animationWithSpriteFrames:framesArray9 delay:0.0407]; 
    id animObject10=[CCAnimation animationWithSpriteFrames:framesArray10 delay:0.0407]; 
    id animObject11=[CCAnimation animationWithSpriteFrames:framesArray11 delay:0.0407]; 
    id animObject12=[CCAnimation animationWithSpriteFrames:framesArray12 delay:0.0407]; 
    id animObject13=[CCAnimation animationWithSpriteFrames:framesArray13 delay:0.0407]; 
    id animObject14=[CCAnimation animationWithSpriteFrames:framesArray14 delay:0.0407]; 

    id animAction=[CCAnimate actionWithAnimation:animObject]; 
    id animAction1=[CCAnimate actionWithAnimation:animObject1]; 
    id animAction2=[CCAnimate actionWithAnimation:animObject2]; 
    id animAction3=[CCAnimate actionWithAnimation:animObject3]; 
    id animAction4=[CCAnimate actionWithAnimation:animObject4]; 
    id animAction5=[CCAnimate actionWithAnimation:animObject5]; 
    id animAction6=[CCAnimate actionWithAnimation:animObject6]; 
    id animAction7=[CCAnimate actionWithAnimation:animObject7]; 
    id animAction8=[CCAnimate actionWithAnimation:animObject8]; 
    id animAction9=[CCAnimate actionWithAnimation:animObject9]; 
    id animAction10=[CCAnimate actionWithAnimation:animObject10]; 
    id animAction11=[CCAnimate actionWithAnimation:animObject11]; 
    id animAction12=[CCAnimate actionWithAnimation:animObject12]; 
    id animAction13=[CCAnimate actionWithAnimation:animObject13]; 
    id animAction14=[CCAnimate actionWithAnimation:animObject14]; 

    //animAction=[CCRepeatForever actionWithAction:animAction]; 
    CCSequence *moveAction = [CCSequence actions:animAction,animAction1,animAction2,animAction3,animAction4,animAction5,animAction6,animAction7,animAction8,animAction9,animAction10,animAction11,animAction12,animAction13,animAction14,nil]; 
    moveAction.tag=100; 
    [equ runAction:moveAction]; 

回答

5

動畫與466幀每幀爲 「1024×768」

停在那兒!

問題是,您的每個4096x4096紋理地圖集(spritesheets)都使用64 MB的內存。只有2-4(取決於設備的內存)將在任何給定的時間適應內存。

由於您按順序對它們進行緩存,因此您還需要增加加載時間,因爲到了應該緩存紋理編號3或4時,cocos2d將收到內存警告,並清除未使用的紋理 - 第一對紋理。

然後當你開始動畫時,它會在每次使用紋理圖集的時候加載到內存中,因爲那個點上唯一的緩存紋理可能是8到10個。同時,其他未使用的紋理會被緩存出來,因爲你不斷收到內存警告。

你有兩個選擇:

  • 停止這種瘋狂(™)
  • 也許可能通過使用TexturePacker和減少紋理顏色深度16位最終(RGB565或RGBA5551 - 精簡了一半的內存使用)並將它們導出爲NPOT(輕微的內存減少)和.pvr.ccz(更快地加載內存減少)可以改善這種情況。

欲瞭解更多信息,請查閱我的cocos2d memory optimization guide

+0

謝謝你的回覆,我感到很榮幸從你那裏得到回覆,我已經閱讀了你的指南,並且我會嘗試使用壓縮技術,但是有沒有辦法解決所有這些問題,我可以在嵌入式播放器中運行視頻在cocos2d中,如果這可能也會解決我的問題。 –

+0

我已經嘗試使用紋理包裝機NPOT選項和rgb 565,但我面臨同樣的問題,它已大幅降低圖像質量 –

+0

您是否也啓用顏色抖動?你有沒有在設備上測試過它?模擬器上的16位顏色/抖動看起來不太好,但在設備上通常不太明顯。視頻播放可能會起作用,如果需要在後臺進行,您需要將cocos2d視圖設置爲透明,並設置GL清晰顏色(對於SO也有答案)。 – LearnCocos2D