2012-03-30 13 views
0

タイルのテクスチャを読み込んでテクスチャを画面に表示した後、タイルベースのゲームを作成していて、フレームレートが60から30に低下しました。グーグル・グーグルの時代とさまざまな解決策を試してみたら、私はまだ原因を突き止めることができません。シンプルコードのCocos2dパフォーマンスの問題

問題を特定して理解する。私は、プログラムがロードされたときに、それはランダムな位置で100個のスプライトを表示する単純なプロジェクトを作成し、HellowWorld層で、その後絶対に何もしなかった。

// on "init" you need to initialize your instance 
-(id) init 
{ 
if((self=[super init])) { 

    CCTexture2D *vlo_Texture = [[CCTexture2D alloc] initWithImage:[UIImage imageNamed:@"Icon-72.png"]]; 

    CCSprite *vlo_Temp[100]; 
    NSInteger vli_X, vli_Y; 
    for (NSInteger vli_Counter=0; vli_Counter<100; vli_Counter++) 
    { 
     vli_X = arc4random()%480; 
     vli_Y = arc4random()%320; 
     vlo_Temp[vli_Counter] = [CCSprite spriteWithTexture:vlo_Texture]; //[CCSprite spriteWithFile:@"Icon-72.png"]; 
     vlo_Temp[vli_Counter].position = ccp(vli_X, vli_Y); 
     [self addChild:vlo_Temp[vli_Counter]]; 
    } 

} 
return self; 
} 

上記のコードは実行のみという事実は衝撃に私を30fpsの。私はこれらのスプライトをリフレッシュするためのタイマーを持っていません。私は(私は仮定?)システムは、単にすべてのスプライトを描画し、何もしてはならないと信じて、私は適用しようとした

[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA4444]; 

if(! [CCDirector setDirectorType:kCCDirectorTypeDisplayLink]) 
    [CCDirector setDirectorType:kCCDirectorTypeMainLoop]; 

を、彼らはパフォーマンスを改善していないしかし、まったく。私にできることはほかにありますか?

ありがとうございます。

アレックス

+0

OSのバージョンや使用しているデバイスを教えてくれると助けになるかもしれません。 – ader

答えて

1

あなたが言う:グーグルとさまざまなソリューションをしようとする日後

...

しかし


what have you tried?があなたのスプライトのすべてを入れてみてください同じテクスチャをに使用している。これにより、これらのスプライトは1回の呼び出しで非常に遅い呼び出しでレンダリングされます。

CCSpriteBatchNode *batchNode = [CCSpriteBatchNode batchNodeWithFile:@"Icon-72.png"]; 
for (NSInteger vli_Counter=0; vli_Counter<100; vli_Counter++) 
    { 
     vli_X = arc4random()%480; 
     vli_Y = arc4random()%320; 
     vlo_Temp[vli_Counter] = [CCSprite spriteWithTexture:vlo_Texture]; //[CCSprite spriteWithFile:@"Icon-72.png"]; 
     vlo_Temp[vli_Counter].position = ccp(vli_X, vli_Y); 
     [batchNode addChild:vlo_Temp[vli_Counter]]; 
    } 

[self addChild batchNode]; 
+0

Jamesさん、私のプログラムでは、個々のファイルにスプライトがありましたが、ここ数日でスプライトシートに変更しました。[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA4444]のような設定を試しました。 および if(![CCDirector setDirectorType:kCCDirectorTypeDisplayLink]) [CCDirector setDirectorType:kCCDirectorTypeMainLoop]; – dimsumz

+0

すべてのスプライトをそのスプライトシートに追加し、スプライトシートテクスチャをバッチコードのパラメータとして使用します。 –

+0

ありがとう、私は今すぐバッチノードを与えるだろう:) – dimsumz

0

デバイスの実行を試みたことがありますか?シミュレータは、特にHD写真や多数のスプライトを扱う場合、実際の「iSomething」パフォーマンスには非常に程遠いものです。