我制作了一个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,但是 vector 的x值为4.3629125e-38。

我想以其原始C++形式返回verts对象,作为b2Vec2数组。我怎样才能做到这一点?

最佳答案

您可以将顶点作为CGPoints存储在NSValue中,并将其存储在数组中。然后在需要时将其转换为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中,我之前从未见过

10-08 05:30