Здесь есть два вопроса. Сначала, если мне нужно создать b2BlockAllocator
до Clone
, а затем удалить (где?) После клонирования? Xcode профилирование прибор не показывает утечки C++ ...Как использовать распределитель Box2D?
b2FixtureDef fixd = fix->fixture;
const b2Shape *shape = fixd.shape;
if(shape->GetType()== b2Shape::e_polygon && flip)
{
b2PolygonShape* ps = (b2PolygonShape*)shape->Clone(new b2BlockAllocator());
for(int i=0;i<ps->m_vertexCount;i++)
{
ps->m_vertices[i].x *= -1;
ps->m_vertices[i].y *= -1;
}
ps->Set(&ps->m_vertices[0], ps->m_vertexCount);
body->CreateFixture(ps, 1.0f);
...
В этом коде я беру кэшированный объект формы, клонировать его, изменять вершины, набором для вычисления нормалей и назначение его объект к телу. Вопрос - это законно?
Update:
-(void) addFixturesToBody:(b2Body*)body forShapeName:(NSString*)shapeName flip:(BOOL)flip
{
BodyDef *so = [shapeObjects_ objectForKey:shapeName];
assert(so);
FixtureDef *fix = so->fixtures;
while(fix)
{
b2FixtureDef fixd = fix->fixture;
const b2Shape *shape = fixd.shape;
if(shape->GetType()== b2Shape::e_polygon && flip)
{
b2BlockAllocator allocator;
b2PolygonShape* ps = (b2PolygonShape*)shape->Clone(&allocator);
for(int i=0;i<ps->m_vertexCount;i++)
{
ps->m_vertices[i].x *= -1;
ps->m_vertices[i].y *= -1;
}
ps->Set(&ps->m_vertices[0], ps->m_vertexCount);
body->CreateFixture(ps, 1.0f);
}
else
{
NSLog(@"noflip...%@", shapeName);
body->CreateFixture(&fix->fixture);
}
fix = fix->next;
}
}
Не могли бы вы объяснить, что вы пытаетесь сделать, и в чем проблема? Для типичного использования Box2D нет необходимости разбираться с функциями распределителя и клонирования. – iforce2d
@ iforce2d: обязательно. У меня есть кешированные формы и функции, которым я даю тело, идентификатор формы, и он создаст приспособление для этого тела на основе найденной формы. Теперь эта функция также имеет свойство flip, поэтому всякий раз, когда это TRUE, мне нужно создать flipped. Поэтому, прежде чем создавать приспособление, я беру обычную форму из кеша, переворачиваю и затем создаю приспособление. Если нет необходимости перевернуть, я просто создаю приспособление из кешированной формы. Перевернутая часть представлена выше. – Pablo
Если все еще не ясно, я отправлю всю функцию. – Pablo