0

Box2D で cocos2d を使用して単純な iPhone ゲームを作成し、LevelObject オブジェクトを含む GameLevel オブジェクトを作成しました。

コンストラクタでレベルオブジェクトを作成したい

LevelObject(CGPoint position, b2BodyType type, b2Shape* shape, CCSprite *sprite);

これには、画面上にオブジェクトを作成するために必要なすべての情報が含まれていると思います。

LevelObject::LevelObject(CGPoint position, b2BodyType type, b2Shape* shape, CCSprite *sprite) : position(position), sprite(sprite) 
{
sprite.position = position;

bodyDef = new b2BodyDef;
bodyDef->type = type;
bodyDef->position.Set(position.x/PTM_RATIO, position.y/PTM_RATIO);
bodyDef->userData = sprite;

fixtureDef = new b2FixtureDef;
fixtureDef->shape = shape;
}

問題は、これを実行しようとすると、SIGABRT エラーが発生することです。でもこれを動かしたら

bodyDef = new b2BodyDef;
bodyDef->type = type;
bodyDef->position.Set(position.x/PTM_RATIO, position.y/PTM_RATIO);
bodyDef->userData = sprite;

コンストラクターの外側で、コンストラクターで bodyDef を渡します。

LevelObject::LevelObject(b2BodyDef* bodyDef, CGPoint position, b2BodyType type, b2Shape* shape, CCSprite *sprite) : bodyDef(bodyDef), position(position), sprite(sprite)

すべてが意図したとおりに機能します。

私は何を間違っていますか?bodyDef = new b2BodyDef をコンストラクターの内部または外部で作成することに違いはありますか?

編集:コンストラクター内の bodyDef オブジェクトも編集できないようです。外部で bodyDef を作ったら、それをパラメータとして取り込んで、

bodyDef->position.Set(134/PTM_RATIO, 33/PTM_RATIO);

コンストラクター内などでは、オブジェクトが画面上でどのように見えるかは変わりません。

4

1 に答える 1

0

newb2BodyDefの作成には使用しないでください。Box2D APIリファレンスでは、b2BodyDefがクラスではなく構造体であることがわかります。

これは、b2BodyDefおよびその他のBox2D構造体を作成する方法です。

b2BodyDef bodyDef;
bodyDef.type = type;
bodyDef.position.Set(position.x/PTM_RATIO, position.y/PTM_RATIO);
bodyDef.userData = sprite;
于 2012-05-14T21:39:07.870 に答える