Android LibGDX 使 Texture/Text "Touch to Start" 闪烁
Android LibGDX Make Texture/Text "Touch to Start" blink
我几乎完成了我的 LibGDX 项目,现在我只是增加用户友好性。
我有一个纹理(也放置在精灵中),我想反复淡入淡出(不是快速闪烁)。它只是矩形时髦的文字,上面写着 "Touch to Start".
- 我考虑制作一个包含 6 张左右不同透明度的图片的动画,并不断更换幻灯片。这是最好的方法吗?
- 我也在寻找一种 libGDX 效果来控制透明度以避免所有开销并且不会使我的动画断断续续。
想不出要添加的相关代码,感谢您的帮助
编辑
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);
我几乎完成了我的 LibGDX 项目,现在我只是增加用户友好性。 我有一个纹理(也放置在精灵中),我想反复淡入淡出(不是快速闪烁)。它只是矩形时髦的文字,上面写着 "Touch to Start".
- 我考虑制作一个包含 6 张左右不同透明度的图片的动画,并不断更换幻灯片。这是最好的方法吗?
- 我也在寻找一种 libGDX 效果来控制透明度以避免所有开销并且不会使我的动画断断续续。
想不出要添加的相关代码,感谢您的帮助
编辑
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);