Iphone 目标C浮点值在内部转换-不知道为什么
我用Cocos2D写了一个游戏,它包含了很多浮点类型的属性来确定我的形状(正方形,三角形)的顶点(x,y)。我有一个Shape类,它只保存顶点总数(int)和顶点总数(CGFloat*)。我还有一个类叫做ShapeHolder,它定义了不同类型形状的值,它的属性叫做Iphone 目标C浮点值在内部转换-不知道为什么,iphone,objective-c,cocos2d-iphone,Iphone,Objective C,Cocos2d Iphone,我用Cocos2D写了一个游戏,它包含了很多浮点类型的属性来确定我的形状(正方形,三角形)的顶点(x,y)。我有一个Shape类,它只保存顶点总数(int)和顶点总数(CGFloat*)。我还有一个类叫做ShapeHolder,它定义了不同类型形状的值,它的属性叫做shapesquare;和形状三角形。在ShapeHolder init am中存储(硬编码)顶点信息(x,y),如下所示,am也会在定义后立即打印值,这非常有效 CGPoint _square[] = {
shapesquare;和形状三角形
。在ShapeHolder init am中存储(硬编码)顶点信息(x,y),如下所示,am也会在定义后立即打印值,这非常有效
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;
看起来您正在为_square做数组指针的浅拷贝。您需要将顶点深度复制到对象中的成员数组中
第一个顶点没有被更改的原因是类保留指向数组中第一个点的指针。阵列中的后续顶点将由内存管理器回收并重新使用。也可能是运气。看起来你正在做数组指针ie\u square的浅拷贝。您需要将每个顶点深度复制到对象中的数组中。您节省了我的时间,非常感谢。还有一个问题,我可以知道班级中的第一个打印值是如何正确打印的吗?我还在阅读浅拷贝与深拷贝的对比。非常感谢。不看代码很难说。取决于_square是如何形成的。这非常有效,我已经编辑了我的问题,在我应该如何标记你的回答为接受之间。但是obj-c运行时决定给出下一个指针。内存管理器可能是一个不准确的描述。我希望这四个都能改变。
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