Android LibGDX使纹理/文本“触摸开始”闪烁

时间:2015-06-25 17:56:12

标签: java android libgdx

我几乎完成了我的LibGDX项目,现在我只是添加了用户友好性。 我有一个纹理(也放在一个精灵中),我想淡入并反复淡出(不快速闪烁)。它只是一个矩形的时髦文字,上面写着“触摸开始”。

  • 我考虑制作一张6张左右的不透明图片的动画,只是不断更换幻灯片。这是最好的方式吗?
  • 我也在寻找一种控制透明度的libGDX效果,以避免所有开销,而不会让我的动画不稳定。

无法想到要添加的任何相关代码,感谢您的帮助

enter image description here

修改

    Gdx.gl.glClearColor(0, 0, 0.2f, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch.begin();
    batch.draw(touchToStartImage, screenWidth / 2 - touchToStartImage.getWidth() / 2, screenHeight / 2 - touchToStartImage.getHeight() / 2);
    elapsed += Gdx.graphics.getDeltaTime();
    blinkFontCache.setAlphas(Interpolation.fade.apply((elapsed / 0.01f) % 1f));
    blinkFontCache.draw(batch);
    blinkFontCache.translate(2f, 2f);
    batch.end();

我还定义了blinkFontCache = new BitmapFontCache(numberPrinter);,其中numberPrinter是应该绘制文本的bitmapfont。我已经阅读了Interpolation和blinkFontCache的API指南,但不幸的是,上面我没有注意到我的屏幕有任何变化。感谢

使用INTERPOLATION进行编辑

    elapsed += Gdx.graphics.getDeltaTime();
    touchToStartSprite.setAlpha(Interpolation.fade.apply((elapsed / FADE_TIME) % 1f));

    blinker.begin();
    touchToStartSprite.draw(batch);
    blinker.end();

使用操作编辑

定义

text = new Image(highScoreImage);
        text.addAction(Actions.alpha(0));
        text.act(0);
        text.addAction(Actions.forever(Actions.sequence(Actions.fadeIn(FADE_TIME), Actions.fadeOut(FADE_TIME))));

渲染()

    blinker.begin();
    text.act(Gdx.graphics.getDeltaTime());
    text.draw(blinker, 1);
    blinker.end();

2 个答案:

答案 0 :(得分:2)

您可以使用scene2d中的Image类,这是一个可以获取纹理区域的actor,并为您提供了几个有用的方法。这是一个实现。

 Image text = new Image(clickToStartRegion);
 Float fadeTime = 1f;

 //...

 text.addAction(Actions.alpha(0)); //make the text transparent.
 text.act(0); //update the text once
 text.addAction(Actions.sequence(Actions.fadeIn(fadeTime), Actions.fadeOut(fadeTime));

 //...

 text.act(deltaTime);

 //...

 text.draw(batch, 1);

答案 1 :(得分:1)

您可以使用插值类作为alpha。假设您正在使用Sprite来绘制它:

private float elapsed;
private static final float FADE_TIME = 1f; //time between blinks

//...

elapsed += deltaTime;
sprite.setAlpha(Interpolation.fade.apply((elapsed / FADE_TIME) % 1f));

//...

spriteBatch.begin();
sprite.draw(spriteBatch);
spriteBatch.end();