我正在使用cocos 2d编写一个游戏,其中包含许多Float类型属性来确定我的形状(Square,Triangle)的顶点(x,y)。我有一个 Shape 类,它只包含顶点(int)和顶点(CGFloat *)的总数。我还有一个名为 ShapeHolder 的类,它定义了不同类型形状的值,它具有名为Shape square; and Shape Triangle
的属性。在ShapeHolder init中存储(硬编码)顶点信息(x,y),如下所示,我也在完美定义后立即打印值
CGPoint _square[] = {
CGPointMake(100.0f, 100.0f) ,
CGPointMake(200.0f, 100.0f) ,
CGPointMake(200.0f, 200.0f) ,
CGPointMake(100.0f, 200.0f)
};.
square = [[[Shape alloc] initWithVerticesLength: 4] retain];
square.vertices = _square;
for (int i = 0; i< square.count; i++) {
NSLog(@"Init Square Vertices X Y = %f , %f" , square.vertices[i].x ,square.vertices[i].y );
}
triangle = [[[Shape alloc] initWithVerticesLength: 3] retain];
triangle.vertices = _triangle;
在我的OpenGL绘图类中检索相同的值以呈现不同的形状时,问题就出现了,这里是代码
allShapes = [[ShapeHolder alloc] init];
for (int i = 0; i< allShapes.square.count; i++) {
NSLog(@"Main Square Vertices X Y = %f , %f" , [[allShapes square]vertices][i].x ,[[allShapes square] vertices][i].y );
}
价值以某种方式转换,不知道为什么请澄清。没有任何运行时错误或编译时错误,这真的困扰我的知识
Init Square Vertices X Y = 100.000000 , 100.000000
Init Square Vertices X Y = 200.000000 , 100.000000
Init Square Vertices X Y = 200.000000 , 200.000000
Init Square Vertices X Y = 100.000000 , 200.000000
Main Square Vertices X Y = 100.000000 , 100.000000
Main Square Vertices X Y = -1.998910 , 0.000000
Main Square Vertices X Y = 0.000000 , 0.000000
Main Square Vertices X Y = -1.998912 , 0.000000
答案 0 :(得分:1)
看起来你正在为_square执行数组指针的浅表副本。您需要将顶点的深层副本复制到对象中的成员数组中。
您的第一个顶点未被更改的原因是您的类保持指向数组中第一个点的指针。数组中的后续顶点由内存管理器回收并重用。可能也是运气。