Box2D - Символ, залепващ за страните на обектите

Използвам Box2D с libgdx. Имам проблем с действието при сблъсък по подразбиране. Когато скоча или ударя горната част на предмет, всичко работи добре. Предметът ми не залепва. Ако удари върха, той стои върху него. Ако удари дъното, пада обратно. Но ако удари някоя от страните, обектът ми залепва, стига да се движа в тази посока. С други думи, гравитацията няма ефект върху него, докато се сблъсква със страната на блока/стената. Направих някои проучвания, но всички решения казаха да използват b2Settings, които не мога да използвам с libgdx. Има ли някакъв начин да поправя това? Кодът, който използвам, за да преместя героя си (движение наляво), е както следва:

level.character.body.setLinearVelocity(
                        -level.character.terminalVelocity.x,
                        level.character.body.getLinearVelocity().y);

Ето една илюстрация. Както можете да видите, тя се залепва за тухлата, вместо да пада. (Моят герой в момента е монета :p)

Залепване за стената


person josephoneill    schedule 13.04.2014    source източник


Отговори (1)


Вместо да използвате SetLinearVelocity, опитайте да използвате ApplyForce или ApplyImpulse, за да преместите нещата. Проблемът е, че SetLinearVelocity ви позволява да създавате нереалистични ситуации, например в този случай, когато топката удари стената, тя трябва да спре и хоризонталната скорост наистина трябва да е нула, но вие отменяте естествения резултат и казвате, че топката не е спряла изобщо и все още се движи.

Обърнете внимание, че пак може да получите този проблем, дори когато използвате ApplyForce или ApplyImpulse, ако силата е достатъчно силна и има достатъчно триене между телата (точно както в реалния свят, ако натиснете нещо в стена достатъчно силно и повърхностите са не е твърде хлъзгав, можете да го спрете от падане).

person iforce2d    schedule 14.04.2014
comment
Благодаря! Има смисъл. Ще пренапиша въведените данни за движение и ще ви уведомя как се е получило. :) - person josephoneill; 14.04.2014