你能帮我在NSArray中存储b2Vec2吗?

Can you help me store b2Vec2 in an NSArray?

本文关键字:存储 b2Vec2 NSArray      更新时间:2023-10-16

我做了一个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]];

然后,从NSArray中读出b2Vec2对象,如下所示:

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

我看到vector对象的xy值,但它有令人困惑的值。

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

我想以原始的c++形式返回verts对象,作为b2Vec2数组。我该怎么做呢?

你可以将你的vert存储在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中,我以前从未见过这样做

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

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

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