你能帮我在NSArray中存储b2Vec2吗?
Can you help me store b2Vec2 in an 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]];
然后,从NSArray
中读出b2Vec2
对象,如下所示:
NSValue *val = [array objectAtIndex:0];
b2Vec2 *verts;
[val getValue:&verts];
b2Vec2 vec = verts[0];
我看到vector
对象的x
和y
值,但它有令人困惑的值。
例如,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];
相关文章:
- 将字符串存储在c++中的稳定内存中
- std::原子加载和存储都需要吗
- C++:将控制台输出存储在宏中更好吗
- 使用QProcess执行命令,并将结果存储在QStringList中
- 访问存储在向量C++中的结构的多态成员
- 如何从存储在std::映射中的std::集中删除元素
- 存储模板类型以强制转换回派生<T>
- 类型总是使用其大小存储在内存中吗
- 当字符串存储在变量中时,如何将字符串转换为wchar_t
- 使用无符号字符数组有效存储内存
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 带结构的二维矢量:如何存储元素
- 添加存储在向量中的大整数的函数出现问题
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 在std::vector上存储带有模板的类实例
- 谷歌测试中的期望值存储在哪里
- 为什么C中的通用链表中存储的数据已损坏
- 在c++中获取两个大int,并将它们存储在数组中
- 你能帮我在NSArray中存储b2Vec2吗?