Цель C Значение с плавающей запятой преобразуется внутри - понятия не имею, почему - PullRequest
0 голосов
/ 29 мая 2011

Я пишу игру, используя cocos 2d, которая включает в себя множество свойств типа Float для определения вершин (x, y) моих фигур (квадрат, треугольник). У меня есть класс Shape , который просто содержит общее количество вершин (int) и вершин (CGFloat *). У меня есть еще один класс с именем ShapeHolder , который определяет значения для различных типов фигур, у него есть свойства, называемые Shape square; and Shape Triangle. В инициализации ShapeHolder (жесткое кодирование) информация о вершинах (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

1 Ответ

1 голос
/ 29 мая 2011

Похоже, вы делаете мелкую копию указателя массива для _square.Вам необходимо выполнить глубокое копирование вершин в массив элементов в вашем объекте.

Причина, по которой ваша первая вершина не изменяется, заключается в том, что ваш класс сохраняет указатель на первую точку в массиве.,Последующие вершины в массиве возвращаются менеджером памяти и используются повторно.Возможно, удачи тоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...