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 ];

}
4

1 に答える 1

2

フレームごとに新しい CCDrawNode を作成しています。時間が経つにつれて、より多くの描画ノードを描画する必要があるため、ゲームの速度が低下します。

解決策: 前もって 1 つの描画ノードを作成し、それを子として追加します。それへの参照を ivar に保持します。この単一の描画ノードだけで描画を実行します。

CCDrawNode の描画メソッドは依然として付加的であることに注意してください。この 1 つのポリゴンだけを描画し、それを徐々に更新する場合は、描画する前に 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)];

別の注意: draw メソッドの外で draw ノードを使用できます。実際、あなたが行ったようにコードを実行すると、描画ノードは次のフレームまで描画されないため、常に 1 フレーム遅れます。スケジュールされた更新方法を使用して、描画ノードを更新します。

于 2013-09-21T09:14:37.233 に答える