你能帮我把b2Vec2存放在NSArray中吗?

时间:2011-11-08 01:28:30

标签: c++ objective-c nsarray

我创建了一个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对象中的yvector值,但它的值很混乱。

例如,PTM_RATIO = 32所以28.3f / PTM_RATIO = 0.884375,但向量的x值为4.3629125e-38。

我希望以verts数组的形式返回原始C ++表单中的b2Vec2对象。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

您可以将您的顶点存储在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 :(得分:1)

将指针放入NSArray可能不是一个好主意,因为您只是添加指向数组的指针而不是实际数据,请尝试将b2Vec2数组复制或初始化为NSData或NSMutableData,然后将它们添加到数组中。 / p>

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

...

b2Vec2 * vl = (b2Vec2*)[[array objectAtIndex:0] bytes];
b2Vec2 vec = vl[0];