с использованием 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);
}
и, как вы видите, она получает спрайт в качестве аргумента, поэтому не у каждого спрайта есть собственное имя прибора.
И что же мне делать ?
я не хочу определять прибор для каждого спрайта сейчас?
Большое спасибо.