1

NSMutableArray動的なが与えられた場合、から、 などにCGPoint線を引く最も速くて効率的な方法は何ですか? パフォーマンスを向上させるために、関数を C または C++ で書き直す必要がありますか? 現在、配列に ~20 を超えるポイントがあると、フレームレートが劇的に低下します。私は cocos2d v2.0.0-rc2 を使用しており、現在以下のものを持っています:array[0]array[1]array[1]array[2]

-(void)draw
{
    for (int i = 0; i < [points count]; i+=2)
    {
        CGPoint startFromArray = [[points objectAtIndex:i] CGPointValue];
        CGPoint endFromArray = [[points objectAtIndex:i+1] CGPointValue];

        ccDrawLine(startFromArray, endFromArray);
    }

    [super draw];
}
4

1 に答える 1

2

ここで反復を使用する必要はありません。Cocos2d には という組み込み関数がありccDrawPoly()ます。次のように使用できます。

CGPoint *verts = malloc(sizeof(CGPoint) * [points count]);

for (int i = 0; i < [points count]; i++) {
    verts[i] = [[points objectAtIndex:i] CGPointValue];
}

ccDrawPoly(verts, [points count], NO);

free(verts);

明らかに、CGPoints を NSValues からボックス化してボックス化解除する代わりに C 配列に格納すると、さらに優れたパフォーマンスが得られますが、本当に可変性が必要な場合は、それは仕方がありません。

の 3 番目の引数についてはccDrawPoly()、 に設定するとYES配列の開始点と終了点が接続され、閉じた多角形が作成されますが、 を使用NOすると開いた線がたくさん作成されます。

于 2012-06-30T18:25:10.867 に答える