контактный слушатель по общему телу - PullRequest
0 голосов
/ 03 июля 2011

с использованием box2d и cocos2d, у меня проблема с определением тел. каждый мой спрайт вызывает функцию, которая определяет его тело, форму, фикстуру, и эта функция получает аргумент вызывающего спрайта.

Теперь я делаю это, чтобы не писать слишком мантийный код для каждого спрайта, потому что у меня будет много спрайтов.

В моем контактном слушателе я должен сделать это:

if ((contact.fixtureA == _bottomFixture && contact.fixtureB == _ballFixture) || ...

Теперь, поскольку функция, которая определяет прибор и тело, является общей, у меня нет имени прибора для каждого тела, следовательно, я не знаю, как я могу дать слушателю конкретный прибор тела.

функция, которую каждый спрайт вызывает для определения своего прибора и тела:

- (void)addBoxBodyForSprite:(CCSprite *)sprite {

    b2BodyDef spriteBodyDef;
    spriteBodyDef.type = b2_dynamicBody;
    spriteBodyDef.position.Set(sprite.position.x/PTM_RATIO,sprite.position.y/PTM_RATIO);
    spriteBodyDef.userData = sprite;
    spriteBody = world->CreateBody(&spriteBodyDef);

    b2CircleShape spriteShape; //b2polygon-for box shape
    spriteShape.m_radius = 35.0/PTM_RATIO;
    //spriteShape.SetAsBox(sprite.contentSize.width/PTM_RATIO/2,sprite.contentSize.height/PTM_RATIO/2); //for b2polygon
    b2FixtureDef spriteShapeDef;
    spriteShapeDef.shape = &spriteShape;
    spriteShapeDef.density = 10.0;
    spriteShapeDef.isSensor = false;
    spriteBody->CreateFixture(&spriteShapeDef);

}

и, как вы видите, она получает спрайт в качестве аргумента, поэтому не у каждого спрайта есть собственное имя прибора. И что же мне делать ? я не хочу определять прибор для каждого спрайта сейчас?

Большое спасибо.

...