1

我正在尝试使用 cocos2d 和 Box2D 编写 iPhone 游戏,这意味着我必须在 Objective-C 和 C++ 之间进行混合。我有一个关于使用指向我创建的 gameLevels 和 levelObjects 对象的指针的问题。

我有一个名为 GameLevel 的类,其中包含 levelObjects 的向量。我认为使用指针是这样做的方法,以确保我使用尽可能少的内存。这意味着我的向量是

std::vector<LevelObject*>* levelObjects;

LevelObject 类包含精灵、b2bodyDef 等,以及所有指针。

当我想绘制一个关卡时,我想遍历这个向量时,问题就开始了。我写的代码是这样的:

-(void)startLevel:(b2World*) world withLevel:(GameLevel*) level{
std::vector<LevelObject*>::iterator it;
for (it = level->getLevelObjects()->begin() ; it != level->getLevelObjects()->end(); ++it) {
    CCSprite* sprite = it->sprite; //Here XCode complaints about "Member reference base type 'LevelObject *' is not a structure or union" and "Use of undeclared identifier 'sprite'". I cannot seem to access any of the objects variables/methods from it->

所以我要问的问题是:使用指向指针向量的指针,这是实现这一目标的好方法吗?为什么迭代不起作用?

谢谢 :)

编辑: getLevelObjects() 是:

std::vector<LevelObject*>* getLevelObjects(){return levelObjects;}
4

2 回答 2

2

您的迭代器指向指针,因此您需要两个取消引用:

(*it)->sprite

迭代器的解引用,

*it

给你一个LevelObject*

于 2012-05-14T09:42:33.140 回答
1

您有两个间接级别,即迭代器和向量内的指针。

您需要(*it)获取指针,然后使用它->来取消引用:

CCSprite* sprite = (*it)->sprite;
于 2012-05-14T09:42:56.247 回答