2012-03-28 9 views
2

OpenGLポリゴンを描画するObjective Cクラスを作成しようとしています。私は頂点座標を格納するためにNSMutableArrayを使ってこれを行うことができました。しかし、これはオブジェクトが描画されるたびにNSMutableArrayをccVertex2F []配列に変換するために配列をループする必要があるため、非効率的なようです。Objective Cは、初期化時にプリミティブC配列インスタンス変数を割り当てます。

私がしたいことは、インスタンス変数としてccVertex2F配列を持つことです。次に、初期化時にサイズをポイント数に設定します。しかし、私の配列のサイズは常にゼロであるため、これはエラーをスローします。

私はJavaのプログラミングに経験はありますが、Cやメモリ管理にはまったく新しいものです。今のところ、これは私が持っているものです。

@interface PolygonNode : CCNode { 
    ccVertex2F * _glPoints ; 
} 

@property (nonatomic, readwrite) ccVertex2F * glPoints ; 
@end 

本の私の理解では、私はccVertex2Fへのポインタであるインスタンス変数を作成していますということです。

私は、次のを持っている私のinitメソッドで:

ccVertex2F sizedGlPoints [numberOfPoints * sizeof(ccVertex2F)]; 
    _glPoints = &sizedGlPoints; 

これの目的は、私の新しい正確なサイズの配列にインスタンス変数のポイントを作ることでした。しかし、このコードの後に​​サイズを印刷すると、_glPointsサイズは変更されません。

私がしたいことの核心は、私がメモリを無駄にしないようにクラスを初期化するときに、配列のサイズを選択できるようにすることです。

答えて

2

あなたは配列にメモリを割り当てるためにmalloc関数を使用することができます。

ccVertext2F *newMemory = malloc(numberOfPoints * sizeof(ccVertex2F)); 
if (newMemory == NULL) { 
    // Handle error 
} 
_glPoints = newMemory; 

はちょうどあなたが(-dealloc中またはあなたはそれを再度割り当てる前に)完了したら、それを解放することを忘れないでください:

free(_glPoints); 
+0

感謝返信のために。それは完璧に働いた! –

0

純粋なCを使用して割り当てようとしている場合は、mallocまたはcallocを使用して割り振りを行い、割り振りを解放します。

だから

ccVertex2F sizedGlPoints [numberOfPoints * sizeof(ccVertex2F)]; 
_glPoints = &sizedGlPoints; 

ccVertex2FがObjectiveCクラスだったら、あなたは割り当てを行うには

[ ccVertex2F alloc ] 

を使用することになり

_glPoints = (ccVertex2F *) calloc(numberOfPoints, sizeof(ccVertex2F); 

なります。

関連する問題