0

多くの人が box2d 物理エンジンに精通しているかどうかはわかりませんが、cocos2d と目的 c 内で使用しています。

これは多かれ少なかれ一般的な客観的な質問かもしれませんが、私はこれを実行しています:

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

ビルド時に addObject 定義でこのエラーを受け取ります。

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

多かれ少なかれ、可変配列に b2PolygonShape を追加する方法を知りたいと思います。b2PolygonShape は、構造体などではなく、単なるクラスのように見えます。これを行うことができると私がGoogleで見つけることができる最も近いものは、「b2PolygonShapeをNSObjectとしてカプセル化し、それを配列に追加する」と説明されていますが、これを行う最善の方法はわかりませんが、私はこれを考えていたでしょうaddObject私の他のインスタンス化されたクラスオブジェクトのいくつかは配列に正常に追加されるため、オブジェクトは using を使用して追加する必要があります。

これはすべて、b2PolygonShape がルートを継承していないためNSObjectですか?

ありがとう

4

2 に答える 2

4

b2PolygonShapeObjC クラスではなく、C++ クラスです。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 に答える