我正在尝试编写一个客观的C类来绘制一个OpenGL多边形我使用NSMutableArray来存储顶点坐标不过,这似乎有点低效,因为每次绘制对象时,都需要在数组上循环以将NSMutableArray转换为ccVertex2F[]数组。
我要做的是将ccVertex2F数组作为实例变量然后在初始化时将大小设置为点数但是这会抛出一个错误,因为数组的大小始终为零。
我在Java编程方面很有经验,但对C和内存管理完全陌生到目前为止,这就是我所拥有的:
@interface PolygonNode : CCNode {
ccVertex2F * _glPoints ;
}
@property (nonatomic, readwrite) ccVertex2F * glPoints ;
@end
我的理解是,我正在创建一个实例变量,它是指向ccVertex2F的指针。
在我的init方法中,我有以下内容:
ccVertex2F sizedGlPoints [numberOfPoints * sizeof(ccVertex2F)];
_glPoints = &sizedGlPoints;
这样做的目的是使实例变量指向新的大小正确的数组但是,当我打印此代码后的大小时,glPoints大小不会更改。
我想做的核心是在初始化类时能够选择数组的大小,这样就不会浪费内存。
最佳答案
可以使用malloc为数组分配内存:
ccVertext2F *newMemory = malloc(numberOfPoints * sizeof(ccVertex2F));
if (newMemory == NULL) {
// Handle error
}
_glPoints = newMemory;
完成后(在
-dealloc
或重新分配之前)记得释放它:free(_glPoints);