0

我不确定你们中的许多人是否熟悉 box2d 物理引擎,但我在 cocos2d 和 Objective c 中使用它。

不过,这或多或少可能是一个一般的objective-c问题,我正在执行此操作:

NSMutableArray *allShapes = [[NSMutableArray array] retain]; 
b2PolygonShape shape;
..
..
[allShapes addObject:shape];

并在构建时在 addObject 定义中收到此错误:

cannot convert 'b2PolygonShape' to 'objc_object*' in argument passing

所以或多或少我想我想知道如何将 b2PolygonShape 添加到可变数组中。b2PolygonShape 似乎只是一个类,而不是结构或类似的东西。我在谷歌上能找到的最接近的东西我认为可以做到这一点被描述为“将 b2PolygonShape 封装为 NSObject,然后将其添加到数组中”,但不确定最好的方法,但我会想到这个对象应该添加 using addObject,因为我的其他一些实例化的类对象可以很好地添加到数组中。

这完全是因为 b2PolygonShape 没有NSObject从根继承吗?

谢谢

4

2 回答 2

4

b2PolygonShape是 C++ 类,而不是 ObjC 类。您只能将 ObjC 实例放入“NS 容器”中。

因为无论如何你都需要 C++,所以最好使用std::vector<b2PolygonShape>.

于 2010-04-10T07:01:16.637 回答
1

NS 容器类(正如 KennyTM 指出的那样)只能存储 NSObject。有时这可能有点痛苦。但是 NS 容器有很多替代品。

您可以编写 Objective-C 包装类(或使用 NSValue),并将它们存储在 NSArray 中。

您可以使用普通的旧 C 数组(但是,如果数组大小未定义并且缩小和增长,则可能无法满足您的需求)

您可以使用哈希表来存储您的引用。

结构的链表也可以派上用场,并且相当容易创建和维护。

如果您决定坚持使用 std::vector,这是一个与任何解决方案一样好的解决方案,您可以在以下网址阅读更多相关信息:http ://www.cplusplus.com/reference/stl/vector/

于 2010-04-13T12:42:08.163 回答