2015-11-22 3 views
0

Я хочу, чтобы текст отображался в центре экрана, указывая на текущий уровень. Он должен появляться постепенно и через некоторое время постепенно исчезать. Я использую scene2d с этапами, актерами .. поэтому я бы использовал Actions.Некоторые действия не работают

Это то, что я есть сейчас:

public class TextActor extends Actor { 

    private BitmapFont font; 
    private CharSequence charSequence; 

    public TextActor(CharSequence charSequence) { 
     font = new BitmapFont(Gdx.files.internal("fonts/white_standard_font.fnt")); 
     this.charSequence = charSequence; 
    } 

    @Override 
    public void act(float delta) { 
     super.act(delta); 
    } 

    @Override 
    public void draw(Batch batch, float delta) { 
     super.draw(batch, delta); 
     font.draw(batch, charSequence, getX(), getY()); 
    } 
} 

В классе, который создает TextActor ..

textActor.addAction(Actions.sequence(Actions.fadeIn(1f), Actions.delay(1f), Actions.fadeOut(1f), new Action() { 
    @Override 
    public boolean act(float delta) { 
     textActor.remove(); 
     transitionInProgress = false; 
     gameState = GameState.RUNNING; 
     Gdx.input.setInputProcessor(stage); 
     return true; 
    } 
})); 
gameTable.addActor(textActor); 

FadeIn, FADEOUT, альфа .. не работает. Я пробовал использовать «moveBy», и он работает, поэтому кажется, что проблема связана с появлением Актера. Есть что-то, что ускользает от меня.

ответ

1

Действия затухания изменяют альфа-значение цвета актера (getColor().a). Вы рисуете шрифт напрямую, не применяя цвет, связанный с актером.

Посмотрите, как Label.draw реализован для лучшего понимания. В то же время, просто попробуйте добавить это выше вашего font.draw(...) вызова:

font.setColor(getColor()) 

Или, если вы не хотите, чтобы изменить весь цвет, только альфа, попробуйте следующее:

font.getColor().a = getColor().a; 

UPDATE :

отметить также, что вы должны применить parentAlpha (второй параметр розыгрыша - помечена как дельта в вашем примере) до конечного альфа:

font.getColor().a = getColor().a * parentAlpha 

Это позволяет вашему актеру исчезнуть, если вы измените альфа сцены или любых родителей.

+0

Благодарим за помощь. Я понял проблему. В любом случае я не понял вашего обновления, и если я попробую ваше первое решение, fadeIn() не работает. Метка появляется, а затем постепенно исчезает, но она также должна появляться постепенно. – user3075478

+0

Прежде чем добавлять свои действия, попробуйте 'textActor.getColor(). A = 0'. Затем он должен исчезать правильно. Прочтите [this] (https://github.com/libgdx/libgdx/wiki/Scene2d#drawing) для лучшего объяснения моего обновленного ответа. – a9y

+0

Спасибо, теперь это работает! – user3075478

Смежные вопросы