我在我的libgdx应用程序中设置一些文本的动画,并希望标签文本淡入和移动(例如类似于此jsfiddle)。
我可以移动,并更改其他对象的alpha(例如Sprite)并可以移动BitmapFontCaches。但是我无法改变BitmapFontChage的alpha值。
宣言:
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尝试将BitmapFontCache的setAlphas()设置为:
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;}
}...
它移动标签(==&gt; .setPosition(x,y)有效!),但是甚至没有触及alpha。这种完全相同的方法适用于Sprites,它可以很好地淡化。
在补充BitmapFontCache的alpha时,是否有一些问题?有可能吗?
非常感谢!
答案 0 :(得分:2)
经过一个小时的调试后,我发现了这种有趣行为的原因。
- Libgdx的BitmapFontCache没有
getAlphas()
方法- 因此,要使用
获取Alpha通道getColor().a
- 但是,这两个并不总是同步的。这种行为是随机的,我自己并不确定它何时同步,什么时候不同步(在上面的问题中,淡出效果会有效,但淡入效果不会)
醇>
解决方案是更改并声明BOTH alpha通道。
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;
对于你,无望的流浪者,我解决这个问题,这样你就可以比我更有效地度过你生命中有限的几分钟。