Cocos2dx — нулевая реституция не прекращает подпрыгивать

Вот мой код ниже.

Добавление спрайта, падающего под действием силы тяжести;

SampleSprite* sp = SampleSprite::create();
sp->setPosition(screenWidth/ 2, screenHeight/2);
this->layer->addChild(sp);

sp->setContentSize(Size(unitW, unitH));
auto ps = cocos2d::PhysicsBody::createBox(sp->getContentSize(), cocos2d::PhysicsMaterial(1.f, 0.f, 1.f));
ps->setDynamic(true);
ps->setRotationEnable(false);
ps->setMoment(0);
sp->addComponent(ps);

Добавление пола, с которым столкнется Sprite выше

cocos2d::Sprite* floor = cocos2d::Sprite::create("res/floor.png");
floor->setContentSize(cocos2d::Size(screenWidth - (2*padding), padding));
floor->setPosition(origin + cocos2d::Vec2(padding, 0));
floor->setAnchorPoint(cocos2d::Vec2(0,0));
auto physics = cocos2d::PhysicsBody::createEdgeBox(cocos2d::Size(screenWidth - (2*padding), padding), cocos2d::PhysicsMaterial(1.f, 0.f, 1.f));
physics->setDynamic(true);
physics->setGravityEnable(false);
floor->addComponent(physics);

this->layer->addChild(floor);

Скриншот тестовой игры. Прыгающий спрайт на полу

0

Решение

Here,I got the code to fix this :-

define FLT_EPSILON 1.19209290e-07F
float _filteredUpdateDelta;

scene->getPhysicsWorld()->setAutoStep(false);

void GameContrler::updatePhysics(float delta)
{
const int phyiscsSubSteps = 3;
float dt = delta / static_cast<float>(phyiscsSubSteps);
_filteredUpdateDelta = dt > __FLT_EPSILON__ ? 0.15 * dt + 0.85 *                                          _filteredUpdateDelta : 0.0;
for (int i=phyiscsSubSteps; i>0; i--)
{
sceneWorld->step(_filteredUpdateDelta);
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]