gpt4 book ai didi

android - libgdx - 如何使用动画效果更改我的字体颜色

转载 作者:行者123 更新时间:2023-11-29 17:32:31 25 4
gpt4 key购买 nike

我尽量以最清晰的方式解释我的需求。想象一下我有一个带有轮廓的字体,现在我希望这个轮廓动态地改变它的颜色但不是急剧变化,就像它从一种颜色轻微变化到另一种颜色一样......一种连续的效果,它在四种颜色之间改变我的轮廓然后从第一个开始。

最佳答案

我不知道你是如何实现字体轮廓的,所以我将使用标签字体颜色变化作为例子——如果你愿意,你可以用你的轮廓来实现它。

我的想法是创建某种在每个屏幕步骤中更新的“动画管理器”——它是非常“直截了当”的分辨率,但应该确实有效。它应该按以下步骤工作:

  1. 如果达到目标颜色则获取下一个目标颜色
  2. 计算使您更接近目标的新步进颜色
  3. 给标签上色

现在你可以使用一些现有的机制来实现这个目标,这两个将对你有用:

HSL/HSB色系

https://en.wikipedia.org/wiki/HSL_and_HSV

是一种使用三个参数的颜色表示 - 色调、饱和度和值。这实际上对您有好处,因为要更改颜色,您只需修改其中一个参数 - 色调,其他参数可以始终相同,这将保证每种颜色都具有相同的饱和度和亮度。

不幸的是,LibGDX 中的 Color 类不支持 hsb/hsl 系统,因此您需要使用一些“外部”工具 - 最好的工具是 Oracle 实现:

int java.awt.Color.HSBtoRGB(float hue, float saturation, float brightness)

您可以使用它以这种方式创建 LibGDX 颜色:

Color color = new com.badlogic.gdx.graphics.Color( java.awt.Color.HSBtoRGB(hue, saturation, brightness) );

当然,您可以使用另一个 hsb->rgb“转换器”或自己实现 - 有一些模式可以计算 rgb 来自 hsl 的值,您可以在 Google 中轻松找到它们。

LibGDX 插值机制

Interpolation.apply(float start, float end, float a)

start 是开始颜色的值,end 是目标颜色的值。 a 参数是您必须自行计算的时间步长。


总结一下更改标签颜色的基本代码如下:

...
float a = 0.0f;

@Override
protected void step()
{
if( a < 1.0f ) a += 0.001f; // 0.01f is your time step - "how fast change"

label.getStyle().fontColor = new com.badlogic.gdx.graphics.Color( java.awt.Color.HSBtoRGB(Interpolation.linear.apply(0.4f, 0.9f, a), 0.5f, 0.5f) );
...

现在使用此代码,您可以创建管理器来处理实现目标,例如:

...
if( a < 1.0f ) a += 0.001f;
else
{
a = 0.0f;
someTargetColor = someValue; //someValue can be taken from an Array
}
...

问候,迈克尔

关于android - libgdx - 如何使用动画效果更改我的字体颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32206410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com