Тема: libGDX
Показать сообщение отдельно
Старый 27.08.2015, 06:42   #5
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: libGDX

Сообщение от FireOwl Посмотреть сообщение
Когда двигаешь тело командой setLinearVelocity() - ты жестко задаешь вектор его движения. Естественно гравитация перестает влиять на него.
Двигай при помощи applyForce или applyImpulse.
В том то и дело, что не помогает, и ттак фризится.
Код
Vector2 lv;
Vector2 pos;

public 
void move(Vector2 dir) {
    
pos = body.getPosition();
    if (
dir.x < 0) {
        
sprite.setFlip(true, false);
    } else if (
dir.x > 0) {
        
sprite.setFlip(false, false);
    }
    
lv = body.getLinearVelocity();
    if (
Math.abs(lv.x) < speed || dir.x != 0) {
        
body.applyLinearImpulse(new Vector2(dir.x * 100000f * speed, 0), pos, false);
    } else if (
dir.x == 0) {
       
// lv.x = 0;
       // body.setLinearVelocity(lv);
    
}

}
public 
void jump() {
    
groundTest();
    if (
hasGround && lv.y <= 0) {
        
body.applyLinearImpulse(new Vector2(0, speed * 18000f), pos, true);
        
hasGround = false;
    }
}

private 
void groundTest() {
    
//hasGround = false;
    
world.rayCast(new RayCastCallback() {
        @
Override
        
public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction) {

            if (
fixture == collider_f || fixture == body_f) {
                
hasGround = false;
                return -
1;
            }
            
hasGround = true;
            
Gdx.app.log("Callback length:", point.dst(pos) + "");
            return 
0;
        }
    }, 
pos, new Vector2(pos.x, pos.y - rect.height * 0.55f));
} 
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием