2014-11-06 6 views
0

Используя cocos2d-x v3.2, у меня есть буксируемые динамические тела bodyA и bodyB. А bodyB не имеет силы тяжести и имеет линейную скорость по оси x. bodyA имеет импульс по оси y. Проблема заключается в том, что bodyA проходит через bodyB. Ожидаемый результат: bodyA сталкивается с bodyB, bodyA отскакивает, а bodyB не влияет на столкновение. Вот пример кода, где bodyA проходит через bodyB.Два динамических тела, пересекающихся или пересекающихся в cocos2d-x v3.2

PhysicsBody *bodyA = PhysicsBody::createCircle(spriteA->getContentSize().width/2); 
bodyA->setDynamic(true); 
bodyA->setMass(0.5f); 
bodyA->setCategoryBitmask(1); 
bodyA->setContactTestBitmask(true); 

PhysicsBody *bodyB = PhysicsBody::createCircle(spriteB->getContentSize().width/2); 
bodyB->setDynamic(true); 
bodyB->setGravityEnable(false); 
bodyB->setVelocity(Vect(100,0)); 
bodyB->setCollisionBitmask(2); 
bodyB->setContactTestBitmask(true); 
bodyB->setMass(5.0f); 

ответ

0

setContactTestBitmask не принимает логическое значение, он должен принять Int, который является битовым, который должен содержать все биты категории, что тело должно конфликтовать с.

Прямо сейчас у ваших тел есть биты 0001 и 0010. Однако у вашей контактной битмаски установлен бит 0001 для обоих тел. Также вы используете битовую маску категории в bodyA и битмаску столкновения в bodyB.

Этот способ должен работать:

PhysicsBody *bodyA = PhysicsBody::createCircle(spriteA->getContentSize().width/2); 
bodyA->setCategoryBitmask(1); 
bodyA->setContactTestBitmask(2); 

PhysicsBody *bodyB = PhysicsBody::createCircle(spriteB->getContentSize().width/2); 
bodyB->setCategoryBitmask(2); 
bodyB->setContactTestBitmask(1); 

Или еще лучше: не изменять битмаски по умолчанию, пока вы абсолютно не нужно.

+0

Спасибо. Я установил это для bool после просмотра [видео] (https://www.youtube.com/watch?v=ow91oT5uIp0&list=PLRtjMdoYXLf4dOgNrnQCw1DyIFGUhnVtZ&index=7). Я редактировал свой код, как вы предлагали, но все тот же результат. – SaffronState

+0

попробуйте без установки битмаски – LearnCocos2D

+0

Без набора битмасок на тело B попадает столкновение с телом A и уходит. И мое требование - тело B не должно уходить (вдоль оси y) после столкновения с телом A, которое движется вдоль оси y. bodyB должен двигаться только линейной скоростью. – SaffronState