2011-09-09 16 views
0

NSmutableArrayまたはNSArrayにb2bodyまたはb2fixtureを追加できますか?
私はいくつかのソリューションを探していましたが、そのうちの1つは、まずNSValueに挿入してからnsmutable配列に値を追加する必要があると言います。ので、私は私のコードでこれを書く:b2bodyおよびb2固定配列

// Create ball body 

      b2BodyDef ballBodyDef; 
      ballBodyDef.type = b2_dynamicBody; 
      ballBodyDef.position.Set(0/PTM_RATIO, 300/PTM_RATIO); 
      ballBodyDef.userData = [ballSpriteArray objectAtIndex:a]; 

     _ballBody = _world->CreateBody(&ballBodyDef); 


     // Create circle shape on ball 
     b2CircleShape circle; 
     circle.m_radius = 30.0/PTM_RATIO; 

     // Create shape definition and add to body 
     b2FixtureDef ballShapeDef; 
     ballShapeDef.shape = &circle; 
     ballShapeDef.density = 0.5f; 
     ballShapeDef.friction = 0.5f; 
     ballShapeDef.restitution = 0.6f; 
     _ballFixture = _ballBody->CreateFixture(&ballShapeDef); 
     fixValue = [NSValue valueWithBytes:&_ballFixture objCType:@encode(struct b2Fixture)]; 
        [ballFixtureArray addObject:fixValue]; 



     //memberi impulse awal terhadap bola 
     b2Vec2 force = b2Vec2(5, 10); 
     _ballBody->ApplyLinearImpulse(force, ballBodyDef.position); 
     bodyValue = [NSValue valueWithBytes:&_ballBody objCType:@encode(struct b2Body)]; 
     [ballBodyArray addObject:bodyValue]; 

そのNSMutableArrayの上のすべてのb2Fixtureとb2bodyを得るために、私はCCtouchBeganメソッドで次のように行った:

for(NSValue *val in ballFixtureArray) 
{ 
    b2Fixture *ballFix; 
    [val getValue:&ballFix]; 


    if (ballFix->TestPoint(locationWorld)) { 
    //if([ballFixtureArray objectAtIndex:0]->TestPoint(locationWorld)){ 
     for (NSValue *bodyVal in ballBodyArray){ 
      b2MouseJointDef md; 
      md.bodyA = _groundBody; 
      b2Body *ballBody; 
      [bodyVal getValue:&ballBody]; 
      md.bodyB = ballBody; 
      md.target = locationWorld; 
      md.collideConnected = true; 
      md.maxForce = 1000.0f * ballBody->GetMass(); 
      _mouseJoint = (b2MouseJoint *)_world->CreateJoint(&md); 
      ballBody->SetAwake(true); 
     } 
    } 
} 

が、それはただ一方で、アプリケーションの作業をdoesntの私は画面上のすべての場所に触れるとクラッシュします。
誰かが私を助けることができます.. ??すべての事前のための前
のthnx ...
よろしく

答えて

2

私はあなたがこのクラスを保存するためにはstd ::リストやSTD ::ベクトルを使用することをお勧めします。しかし、実際にNSArrayでこのクラスをNSObjectでラップする必要がある場合は、NSObjectでラップしてください。

@interface Wrapper : NSObject 
{ 
    b2Body *body; 
} 
@property (nonatomic, assign) b2Body *body; 
@end 
関連する問題