2015-07-14 4 views
2

Я оживляю некоторый текст в приложении libgdx и хотел бы, чтобы текст ярлыка затухал и перемещался (например, аналогично этому jsfiddle).Как tween альфа BitmapFontCache в libgdx?

Я могу перемещать и изменять альфа других объектов (например, Sprites) и перемещать BitmapFontCaches. Однако я не могу изменить альфа-файл BitmapFontChage.

Декларация:

message = new BitmapFontCache(messageFont, true); 
message.setWrappedText("some text", 10.0f, 10.0f, 10.0f); 
message.setAlphas(0.0f); 

В моем классе экран, я переопределить метод визуализации, и вызвать .draw() по классу визуализатора, который (помимо всего прочего) по существу только message.draw(batch); вызов.

@Override 
public void render(float delta) { 
    ... 
    try{ 
     batch.begin(); 

     feedbackRenderer.draw(batch); 

     tweenManager.update(delta);} 
    finally{ 
     batch.end(); 
    } 
} 

Тогда, как часть временной шкалы Я называю эти два подростков. (Да, они обернуты в .push() и я начинаю свой tweenManager :)

Tween.to(message, BitmapFontCacheAccessor.POSITION_X, animationDuration) 
         .target(35.0f) 
Tween.to(message, BitmapFontCacheAccessor.ALPHA, animationDuration) 
          .target(1.0f) 

BitmapFontCacheAccessor пытается setAlphas() из BitmapFontCache как таковой:

public class BitmapFontCacheAccessor implements TweenAccessor<BitmapFontCache> { 

public static final int POSITION_X = 1; 
public static final int ALPHA = 2; 

@Override 
public void setValues(BitmapFontCache target, int tweenType, float[] newValues) { 
    switch (tweenType) { 
     case POSITION_X: 
      float y = target.getY(); 
      target.setPosition(newValues[0], y); 
      break; 
     case ALPHA: 
      target.setAlphas(newValues[0]); 
       break;} 
}... 

Он перемещает метку (==> .setPosition (x, y) работает!), но даже не касается альфы. Этот точный подход работает для спрайтов, которые красиво исчезают.

Возможно ли, что уловка при анимации альфа-бита для BitmapFontCache? Является ли это возможным?

Большое спасибо!

+0

показать код, на котором вы рисуете bitmapfontcache – Barodapride

+0

Эй, я добавил код. Это просто стало еще более странным - после тренда подкачки, если я назову фейдер-анимацию (например, спустившись с 1.0 на 0.0), она исчезает ** !? Я не уверен, что с этим делать. –

+0

Где находится деталь, где вы конкретно визуализируете шрифт? – Barodapride

ответ

2

После хорошего часа отладки я нашел причину этого смешного поведения.

  1. BitmapFontCache Libgdx в не имеет getAlphas() метод
  2. Поэтому, чтобы получить альфа-канал я использовал getColor().a
  3. Однако эти два не всегда синхронизированы. Поведение довольно случайное, я сам не совсем уверен, когда он синхронизируется, и когда он этого не делает (f.ex. в вопросе выше, затухания будут работать, но fade-ins не будут)

Решение состоит в том, чтобы изменить и объявить ОБА альфа-каналы.

Определение BitmapFontCache:

message = new BitmapFontCache(messageFont, true); 
message.setColor(1,1,1,0); 
message.setAlphas(0); 

и внутри TweenAccessor:

case ALPHA: 
//first alpha channel 
    target.setAlphas(newValues[0]); 
//second alpha channel 
    Color c = target.getColor(); 
    c.a = newValues[0]; 
    target.setColor(c); 

    break; 

Вам, безнадежной SO странник, я адресую этот ответ, так что вы можете провести некоторые из конечного числа минут твоей жизни лучше, чем я.

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

  • Нет связанных вопросов^_^