我制作了一个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
,但是 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中,我之前从未见过