我不确定你们中的很多人是否熟悉box2d物理引擎,但我在cocos2d和Objective c中使用它。
这或多或少可能是一个普遍的目标问题,但我正在执行这个:
NSMutableArray *allShapes = [[NSMutableArray array] retain];
b2PolygonShape shape;
..
..
[allShapes addObject:shape];
并在build:
上的addObject定义上收到此错误cannot convert 'b2PolygonShape' to 'objc_object*' in argument passing
所以我或多或少想知道如何将b2PolygonShape添加到可变数组中。 b2PolygonShape似乎只是一个类,而不是结构或类似的东西。我认为可以在google上找到的最接近的东西被描述为“将b2PolygonShape封装为NSObject,然后将其添加到数组中”,但不确定最佳方法,但是我会想到这一点对象应该使用addObject
添加,因为我的一些其他实例化的类对象可以很好地添加到数组中。
这是因为b2PolygonShape不会在它的根处继承NSObject
吗?
由于
答案 0 :(得分:4)
b2PolygonShape
是一个C ++类,而不是一个ObjC类。您只能将ObjC实例放入“NS-containers”。
由于您无论如何都需要C ++,最好使用std::vector<b2PolygonShape>
。
答案 1 :(得分:1)
NS-container类可以(正如KennyTM指出的那样)只存储NSObjects。这有时可能会有点痛苦。但是有很多替代NS容器的替代品。
您可以编写Objective-C包装类(或使用NSValue),并将它们存储在NSArray中。
您可以使用普通的旧C数组(但是,如果数组大小未定义并且缩小和增长,则可能无法满足您的需求)
您可以使用哈希表来存储引用。
结构的链接列表也可以派上用场,并且相当容易创建和维护。
如果您决定坚持使用std :: vector,这是一个很好的解决方案,您可以在以下位置阅读更多相关信息:http://www.cplusplus.com/reference/stl/vector/