1

cocos2dとBox2Dを使用してiPhoneゲームを作成しようとしています。つまり、Objective-CとC++を組み合わせる必要があります。作成したgameLevelsとlevelObjectsのオブジェクトへのポインターの使用に関して質問があります。

levelObjectsのベクトルを含むGameLevelというクラスがあります。できるだけメモリを使わないようにするために、ポインタを使用するのがその方法だと思いました。つまり、私のベクトルは

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

イテレータはポインタを指すため、2 つの逆参照が必要です。

(*it)->sprite

イテレータの逆参照、

*it

を与えますLevelObject*

于 2012-05-14T09:42:33.140 に答える
1

ベクター内には、反復子とポインターという 2 つのレベルの間接性があります。

(*it)ポインターに到達し、それ->を逆参照するために使用する必要があります。

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