forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Android (http://forum.boolean.name/forumdisplay.php?f=150)
-   -   libGDX (http://forum.boolean.name/showthread.php?t=19913)

RegIon 21.07.2015 08:34

libGDX
 
Как только начал использовать, сразу возникли воросы:
  • setBlendFunc какие может применять параметры? хотельсь бы картинку по BlendingMode в openGL
  • Нельзя установить флаг, что бы все текстуры были с линейной интерполяцией?
  • setColor для BitmapFont не работает? У меня нет, получаю из него BitmapFontCache и устанавливают setColors, только это меняет цвет. Версия 1.6.9

Igor 21.07.2015 13:37

Ответ: libGDX
 
А в исходниках посмотреть? (intellij idea позволяет с goto declaration в пару кликов их открывать).

UPD: в классе Texture есть
final static Map<Application, Array<Texture>> managedTextures
- списочек загруженных текстур.
Модификатора доступа нет - чтобы добраться до него, надо будет унаследоваться от Texture или забить на этот способ.
Флагов не заметно, по дефолту в переменные присваивается Nearest.
Имхо, проще написать какой-нибудь метод в стиле Texture loadTexture(String name), который будет грузить текстуру и ставить нужные параметры фильтрации, генерировать mipMaps и делать прочие вещи.

RegIon 26.08.2015 19:41

Ответ: libGDX
 
Вопрос возник про box2d.
Я создал игрока, делаю прыжок apllyImpulse(0,-10000), и он типо прыгает, но если начать двигать его по горизонтали в полете (setLinearVelocity (x, y),где 'у'- старая скорость,или импульсом), то он перестает падать, пока я не перестану двигать, затем продолжает, как будто на паузу падение поставили.
Будто блокируется физика во время установки параметров.
Почему так может быть?

Как сделать скорость падения более нефизизически быстрой, setGravity(0,-40) не помогают, linearDamping(0f) тоже.

Код пока не могу скинуть.

FireOwl 26.08.2015 19:53

Ответ: libGDX
 
Когда двигаешь тело командой setLinearVelocity() - ты жестко задаешь вектор его движения. Естественно гравитация перестает влиять на него.
Двигай при помощи applyForce или applyImpulse.

RegIon 27.08.2015 06:42

Ответ: libGDX
 
Цитата:

Сообщение от FireOwl (Сообщение 298949)
Когда двигаешь тело командой setLinearVelocity() - ты жестко задаешь вектор его движения. Естественно гравитация перестает влиять на него.
Двигай при помощи applyForce или applyImpulse.

В том то и дело, что не помогает, и ттак фризится.
Код
PHP код:

Vector2 lv;
Vector2 pos;

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

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

private 
void groundTest() {
    
//hasGround = false;
    
world.rayCast(new RayCastCallback() {
        @
Override
        
public float reportRayFixture(Fixture fixtureVector2 pointVector2 normalfloat 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.xpos.rect.height 0.55f));



FireOwl 27.08.2015 11:05

Ответ: libGDX
 
Собрал демку (на основе старой записи из блога LibGDX):
http://pastebin.com/650qW2NG

Движение происходит как раз через импульсы, с контролем максимальной скорости:
PHP код:

Vector2 vel player.getLinearVelocity();
Vector2 pos player.getPosition();

// cap max velocity on x
if(Math.abs(vel.x) > MAX_VELOCITY) {
    
vel.Math.signum(vel.x) * MAX_VELOCITY;
    
player.setLinearVelocity(vel.xvel.y);
}

// apply left impulse, but only if max velocity is not reached yet
if(Gdx.input.isKeyPressed(Keys.A) && vel.> -MAX_VELOCITY) {
    
player.applyLinearImpulse(-2f0pos.xpos.ytrue);
}
// apply right impulse, but only if max velocity is not reached yet
if(Gdx.input.isKeyPressed(Keys.D) && vel.MAX_VELOCITY) {
    
player.applyLinearImpulse(2f0pos.xpos.ytrue);


Полная картина - на Пастебин.

RegIon 27.08.2015 12:12

Ответ: libGDX
 
Попробую.
Проблема выскакивает когда импульс 8-10 значный, на низких-нормально


Часовой пояс GMT +4, время: 19:06.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot