Animation Libgdx动态设置字母动画

Animation Libgdx动态设置字母动画,animation,libgdx,Animation,Libgdx,我想制作任意随机文本的动画,比如这个gif 我怎样才能像这样设置字母的动画,或者以不同的方式设置字母的动画。我只是想让字母更生动。任何其他动画也将工作,我想动画的信件一样,在后效果的方法。但“后效果”动画将作为图片导入。我想在任何给定的文本上应用动画 编辑: @Tenfour04 正如你们提到的,我尝试在红色渐变图像上应用着色器,但并没有成功,着色器正在渲染白色图像 我得到了黑白图像:( 我的渲染和创建功能: public void create () { batch = new

我想制作任意随机文本的动画,比如这个gif

我怎样才能像这样设置字母的动画,或者以不同的方式设置字母的动画。我只是想让字母更生动。任何其他动画也将工作,我想动画的信件一样,在后效果的方法。但“后效果”动画将作为图片导入。我想在任何给定的文本上应用动画

编辑: @Tenfour04

正如你们提到的,我尝试在红色渐变图像上应用着色器,但并没有成功,着色器正在渲染白色图像

我得到了黑白图像:(

我的渲染和创建功能:

public void create () {
    batch = new SpriteBatch();
    ShaderProgram.pedantic = false;
    t = new Texture("grad.png");
    shader = new ShaderProgram(Gdx.files.internal("vert.vert"), Gdx.files.internal("frag.frag"));

    sprite=new Sprite(t);

}

@Override
public void render () {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    if(time<1)
    time+=Gdx.graphics.getDeltaTime();
    else time=0;

    shader.begin();
    shader.setUniformf("u_progress",time);
    shader.end();

    batch.enableBlending();
    batch.begin();
    batch.setShader(shader);
    sprite.draw(batch);
    batch.end();

}

另外,这是我的第一个自定义着色器,所以不知道出了什么问题。

您必须对字体的每个字符进行预处理。您需要做的是沿要“绘制”的路径将图像的一个通道设置为渐变在运行时。你需要在Gimp这样的绘图程序中找到这样做的方法。因此,红色通道可以是沿路径从0到255的渐变,并且保持alpha不变。你可以使用免费的应用程序Shoebox将所有字母图像组装成一个BittmapFont。在游戏中,使用自定义着色器,该着色器具有统一的浮点值,用于动画进程0到1。在片段着色器中,使用
float opacity=step(tex.r,u_progress);gl_FragColor=vec4(v_color.rgb,v_color.a*纹理.a*不透明度)
@Tenfour04我无法理解渐变的含义。请您详细说明一下。它对沿着路径跟踪有什么帮助?想象一个简单的纹理,左侧为黑色,右侧为纯红色。如果您的着色器的值在0和1之间是一致的,并且您在阶跃函数中将其与纹理中的红色一起使用,它将将导致部分纹理可见,而其余部分可见。例如,如果使用
步骤(u\u progress,tex.r)
,并且
u\u progress
为0.25,则纹理的前25%将计算为0,最后75%将计算为1。然后,您可以将该数字乘以不透明度。您还可以为均匀设置动画以实现扫掠效果。@Tenfour04,您的解决方案正在工作,但纹理已被粉刷,尝试了所有方法我搞不懂。请帮忙。对不起,我是着色器的新手:)你必须对字体的每个字符进行预处理。您需要做的是使图像的一个通道沿运行时要“绘制”的路径形成渐变。您需要在像Gimp这样的绘图程序中找到这样做的方法。因此,红色通道可以是沿路径从0到255的渐变,并且保持alpha不变。你可以使用免费的应用程序Shoebox将所有字母图像组合成一个BittmapFont。在游戏中,使用一个自定义着色器,该着色器具有统一的浮动,用于从0到1的动画进度。在片段着色器中,使用
float opacity=step(tex.r,u_progress);gl_FragColor=vec4(v_color.rgb,v_color.a*纹理.a*不透明度)@Tenfour04我不懂梯度的意思。请你详细说明一下好吗。它将如何帮助沿着路径跟踪?想象一个简单的纹理,左侧为黑色,右侧为纯红色。如果着色器具有0和1之间的统一值,并且在阶跃函数中将其与纹理中的红色一起使用,则会导致纹理的一部分可见,而其余部分可见。例如,如果使用
step(u_progress,tex.r)
,并且
u_progress
为0.25,则纹理的前25%将计算为0,最后75%将计算为1。然后你可以将这个数字乘以不透明度。您还可以设置制服的动画以实现扫掠效果。@Tenfour04,您的解决方案正在工作,但纹理已被粉刷,尝试了所有方法但仍无法解决。请帮忙。抱歉,我是着色器的新手:)
void main() {
    vec4 tex = texture2D(u_texture, v_texCoords);
    float opacity = step(tex.r, u_progress);
    gl_FragColor = vec4(v_color.rgb, v_color.a * tex.a * opacity);
}