You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何暂停LIBGDX ProgressBar动画?按钮监听器无法停止动画

解决LibGDX ProgressBar动画暂停问题

LibGDX的ProgressBar动画是靠act(float delta)方法驱动的,要暂停动画,核心就是让它在更新时不推进时间进度。原生ProgressBar没提供直接暂停的接口,得自定义一个可暂停的子类来实现:

  1. 自定义可暂停的ProgressBar类
public class PausableProgressBar extends ProgressBar {
    private boolean isPaused = false;

    public PausableProgressBar(float min, float max, float stepSize, boolean vertical, ProgressBarStyle style) {
        super(min, max, stepSize, vertical, style);
    }

    @Override
    public void act(float delta) {
        // 暂停时传入0,让动画停止更新
        super.act(isPaused ? 0 : delta);
    }

    public void setPaused(boolean paused) {
        this.isPaused = paused;
    }

    public boolean isPaused() {
        return isPaused;
    }
}
  1. 替换原有ProgressBar的创建代码
    把你原来创建ProgressBar的代码改成用这个自定义类:
// 替换原来的ProgressBar实例化
PausableProgressBar bar = new PausableProgressBar(0.0f, 1.0f, 0.01f, false, progressBarStyle);
bar.setBounds(100, 1600, 875, 50);
bar.setAnimateDuration(25); // 注意补充分号
bar.setValue(1f);
stage.addActor(bar);
  1. 在暂停按钮监听器里控制暂停状态
    在你的Pause按钮点击事件里,切换暂停状态:
pauseButton.addListener(new ClickListener() {
    @Override
    public void clicked(InputEvent event, float x, float y) {
        bar.setPaused(!bar.isPaused());
    }
});

原理很直白:ProgressBar的动画进度是基于每次act传入的delta时间计算的,当我们传入0时,动画的时间推进就会停止,进度条就会停在当前位置。需要恢复时,再传入正常的delta即可。

内容的提问来源于stack exchange,提问作者robs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 15:35:50