如何暂停LIBGDX ProgressBar动画?按钮监听器无法停止动画
解决LibGDX ProgressBar动画暂停问题
LibGDX的ProgressBar动画是靠act(float delta)方法驱动的,要暂停动画,核心就是让它在更新时不推进时间进度。原生ProgressBar没提供直接暂停的接口,得自定义一个可暂停的子类来实现:
- 自定义可暂停的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; } }
- 替换原有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);
- 在暂停按钮监听器里控制暂停状态
在你的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
相关产品推荐
相关产品推荐

