2012-05-04 7 views
1

Я новичок в физике в cocos2d. Я использую бурундук, и когда два объекта сталкиваются, его просто «мягко», как и они, сделанные из губки или резины.биткомбинация слишком мягкая

Мой код:

cpInitChipmunk(); 
space = cpSpaceNew(); 
space->gravity = cpv(0, 0); 
schedule(schedule_selector(HelloWorld::step), 1.0f/60.f); 
astroBody = cpBodyNew(100, INFINITY); 
astroBody->p = cpv(512,384); 
cpSpaceAddBody(space, astroBody); 
int num2 = 8; 
cpVect vertsAstro[] = { 
    cpv(-17.0f, -44.9f), 
    cpv(-29.5f, -33.2f), 
    cpv(-32.9f, -13.1f), 
    cpv(-24.0f, 11.7f), 
    cpv(24.6f, 11.5f), 
    cpv(32.9f, -12.9f), 
    cpv(29.3f, -33.1f), 
    cpv(17.0f, -44.7f) 
}; 
astroShape = cpPolyShapeNew(astroBody, num2, vertsAstro, cpv(0,0)); 
astroShape->e = 0.0f; 
astroShape->u = 0.0f; 
astroShape->collision_type = 0; 
astroShape->data = player; 
cpSpaceAddShape(space, astroShape); 

cpBody *box = cpBodyNew(INFINITY, INFINITY); 
box->p = cpv(z->getPosition().x+32, z->getPosition().y+32); 
int num = 5; 
cpVect verts[] = { 
    cpv(-32, -32), 
    cpv(-32, 32), 
    cpv(32, 32), 
    cpv(32, -32), 
    cpv(-32, -32) 
}; 
cpShape *boxShape = cpPolyShapeNew(box, num, verts, cpv(0,0)); 
boxShape->e = 0.0f; 
boxShape->u = 0.0f; 
boxShape->collision_type = 1; 
boxShape->data = z; 
cpSpaceAddStaticShape(space, boxShape); 

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

ответ

2

Вы должны использовать Бурундук 5. Вам необходимо установить поля, такие как shape-> e = 1.0.

Функции приемника/сеттера являются частью бурового насоса 6. Вы можете по-прежнему устанавливать поля напрямую, но не рекомендуется, так как функции сеттера автоматически будут пробуждать объекты при изменении значений.

+0

Я думаю, что я должен обновиться до версии v6. Благодарю. – McDermott

+0

Я сталкиваюсь с игроком и объектами, задавая скорость игрока ('astroBody-> v = vector;') Это делается каждый тик. Я думаю, что это может быть проблемой. – McDermott

+0

Хорошо, я понял. Теперь я использую cpBodyApplyForce(), и теперь он работает отлично. Объект сталкивается сейчас, как я и хотел. Прямая настройка скорости была слишком большой. – McDermott

1

Из документов:

void cpShapeSetElasticity(cpShape *shape, cpFloat value)

Эластичность формы. Значение 0.0 не дает отказов, а значение из 1.0 даст «идеальный» отскок. Однако из-за неточностей в моделирование с использованием 1,0 или выше не рекомендуется. Эластичность для столкновения определяется путем умножения эластичности отдельных фигур вместе.

Помогло ли это?

+0

Спасибо, я попробую. – McDermott

+0

Я думаю, что это устарело или что-то: '' cpShapeSetElasticity ': идентификатор не найден' – McDermott