Android LibGDX 使 Texture/Text "Touch to Start" 闪烁

Android LibGDX Make Texture/Text "Touch to Start" blink

我几乎完成了我的 LibGDX 项目,现在我只是增加用户友好性。 我有一个纹理(也放置在精灵中),我想反复淡入淡出(不是快速闪烁)。它只是矩形时髦的文字,上面写着 "Touch to Start".

想不出要添加的相关代码,感谢您的帮助

编辑

    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 是用来绘制文本的位图字体。我已经阅读了插值和 blinkFontCache 的 API 指南,但不幸的是,我没有注意到上面的屏幕有任何变化。谢谢

解决方案

使用插值进行编辑

    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();

您可以对 alpha 使用插值 class。假设您使用 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();

您可以使用 scene2d 中的 Image class,它是一个可以获取纹理区域并为您提供多种有用方法的 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);