Как ограничить импульс после прыжка в box2d?

Как я мог ограничить импульс? Я бы хотел, чтобы тело прыгало быстро, и после этого ограничил бы его прыжок.

Я ищу что-то вроде следующего: трение после импульса, но это не работает (игрок остается на своем месте по оси Y, так как vec2.y будет равен «0»)

//after a touch
body->ApplyLinearImpulse( b2Vec2(x,y), body->GetPosition() );
vec2 = body->GetLinearVelocity();

//in the tick method, called every step
vec2.y = vec2.y * 0.99;
CCLOG(@"vec2.y : %f", vec2.y);
body->SetLinearVelocity(vec2);

person Paul    schedule 30.06.2012    source источник
comment
Может быть, вы могли бы посмотреть, как быстро тело движется в вертикальном направлении, и прикладывать небольшую силу, противоположную этому, каждый временной шаг.   -  person iforce2d    schedule 30.06.2012
comment
@ iforce2d спасибо, как бы вы это сделали?   -  person Paul    schedule 01.07.2012


Ответы (1)


Я долго искал эту тишину, но наконец сделал это:

//call this after touch
       body->ApplyLinearImpulse(b2Vec2(0, 35000), body->GetPosition());

        [self schedule:@selector(CheckVelocity) interval:0.0001];
        [self scheduleOnce:@selector(toggleCheckForLanding) delay:.5];


-(void)CheckVelocity
{
set a max velocity according to your jump i have set it 13.....
    int velocitymax = MAX_VELOCITY;//13
    b2Vec2 vel = body->GetLinearVelocity();
    if(vel.y>velocitymax)
    {
        vel.x = 0;
        vel.y = MAX_VELOCITY;
        body->SetLinearVelocity( vel );
    }

}


-(void) toggleCheckForLanding
{
    [self unschedule:@selector(CheckVelocity)];
    canCheckForLanding_ = YES;
}
person Umair Malik    schedule 02.01.2015