Arrays b2body和b2fixture合并到阵列中

Arrays b2body和b2fixture合并到阵列中,arrays,nsmutablearray,nsarray,box2d,Arrays,Nsmutablearray,Nsarray,Box2d,我可以将b2body或b2fixture添加到NSmutableArray或NSArray中吗? 我一直在寻找一些解决方案,其中一个说应该先将其插入NSValue,然后将值添加到nsmutable数组中。所以我在我的代码中写下: // Create ball body b2BodyDef ballBodyDef; ballBodyDef.type = b2_dynamicBody; ballBodyDef.position.S

我可以将b2body或b2fixture添加到NSmutableArray或NSArray中吗?
我一直在寻找一些解决方案,其中一个说应该先将其插入NSValue,然后将值添加到nsmutable数组中。所以我在我的代码中写下:

// 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,我在CCTouchBeging方法中执行了以下操作:

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);
        }
    }
}
但它不起作用,另一方面,当我触摸屏幕上的每个位置时,应用程序就会崩溃。
有人能帮我吗?。。
thnx之前,每次预付款。

关于

我建议您使用std::list或std::vector来存储这些类。但如果确实需要将此类存储在NSArray中,请使用NSObject包装它们:

@interface Wrapper : NSObject
{
   b2Body *body;
}
@property (nonatomic, assign) b2Body *body;
@end