Можете ли вы помочь мне сохранить b2Vec2 в NSArray? - PullRequest
1 голос
/ 08 ноября 2011

Я сделал NSArray, в котором есть несколько b2Vec2 (C ++) объектов.Я использовал следующий код:

NSMutableArray *array = [[NSMutableArray alloc] init];
b2Vec2 verts[] = {
    b2Vec2(28.3f / PTM_RATIO, 80.3f / PTM_RATIO),
    b2Vec2(7.1f / PTM_RATIO, 89.4f / PTM_RATIO)
};

[array addObject:[NSValue valueWithPointer:verts]];

Затем я считал b2Vec2 объекты из NSArray примерно так:

NSValue *val = [array objectAtIndex:0];
b2Vec2 *verts;
[val getValue:&verts];
b2Vec2 vec = verts[0];

Я видел x и y значения из vector объекта, но он имеет запутанные значения.

Например, PTM_RATIO = 32, поэтому 28.3f / PTM_RATIO = 0.884375, но вектор имеет значение x 4,3629125e-38.

Я хочу вернуть объект verts в исходной форме C ++,как массив b2Vec2.Как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 08 ноября 2011

Вы можете сохранить свои верты как в NSValue как CGPoints и сохранить их в массиве.Затем переводите на b2Vec2, когда вам это нужно.

//

NSMutableArray *array = [[NSMutableArray alloc] init];

CGPoint vert1 = CGPointMake(28.3f / PTM_RATIO, 80.3f / PTM_RATIO);
CGPoint vert2 = CGPointMake(7.1f / PTM_RATIO, 89.4f / PTM_RATIO);
[array addObject:[NSValue valueWithCGPoint:vert1]];
[array addObject:[NSValue valueWithCGPoint:vert2]];

, затем извлекайте

NSValue *vert1val = [array objectAtIndex:0];
NSValue *vert2val = [array objectAtIndex:1];


b2Vec2 b2vert1 = [vert1val CGPointValue];
b2Vec2 b2vert2 = [vert2val CGPointValue];

Для удовольствия и делитесь с нами, вы можете попробоватьхранение b2Vec2 непосредственно в NSValue объектах, учитывая, что под ними находятся те же структуры.Что касается хранения массива структур непосредственно в NSValue, я никогда не видел, чтобы это было сделано до

1 голос
/ 08 ноября 2011

помещать указатель в NSArray, вероятно, не очень хорошая идея, потому что вы добавляете только указатели к массиву без фактических данных, попробуйте скопировать или инициализировать ваш массив b2Vec2 в NSData или NSMutableData, а затем добавить их в ваш массив.

[array addObject:[NSData dataWithBytes:verts length:sizeof(b2Vec2)*2]];

...

b2Vec2 * vl = (b2Vec2*)[[array objectAtIndex:0] bytes];
b2Vec2 vec = vl[0];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...