【问题标题】:Pausing a Timer and Resuming暂停计时器并恢复
【发布时间】:2012-08-06 18:38:00
【问题描述】:

这是我用来控制间隔的计时器类。欢迎大家使用。

我遇到的问题是我的暂停和恢复。它正确暂停,但是当我尝试使用我的 resume() 时,它不会恢复时间。任何想法为什么?

    public class Timer implements IUpdateHandler {
        // ===========================================================
        // Constants
        // ===========================================================

        // ===========================================================
        // Fields
        // ===========================================================
        private final ITimerCallback    mCallback;
        private float                                   mInterval;

        private float                                   mSecondsElapsed;
        protected boolean                               mPause  = false;

        private float                                   pausedSecond;

        // ===========================================================
        // Constructors
        // ===========================================================
        public Timer(final float interval, final ITimerCallback pCallback) {
        this.mInterval = interval;
        this.mCallback = pCallback;

        }

        // ===========================================================
        // Getter & Setter
        // ===========================================================
        public void setInterval(final float pInterval) {
        this.mInterval = pInterval;
        }

        // ===========================================================
        // Methods for/from SuperClass/Interfaces
        // ===========================================================
        @Override
        public void onUpdate(float pSecondsElapsed) {

        this.mSecondsElapsed += pSecondsElapsed;
        if (this.mSecondsElapsed >= this.mInterval) {
        if (!this.mPause) {
        this.mSecondsElapsed -= this.mInterval;
        this.mCallback.onTick();
        }
        }
        }

        @Override
        public void reset() {
        this.mSecondsElapsed = 0;

        }

        // ===========================================================
        // Methods
        // ===========================================================

        // ===========================================================
        // Inner and Anonymous Classes
        // ===========================================================
        public interface ITimerCallback {
                public void onTick();
        }

        public void pause() {

        this.mPause = true;
        this.pausedSecond = this.mSecondsElapsed;
        }

        public void resume() {
        if (this.mPause) {
        this.mSecondsElapsed = this.pausedSecond;
        this.mPause = false;

        } else {
        // not paused
        }
        }
}

【问题讨论】:

  • 您是否尝试过属于 AndEngine 的 TimerHandler 类?对我来说就像一个魅力。
  • 嗯,它没有我需要的方法。
  • 它确实具有上面代码中列出的所有方法。也许看看:org.anddev.andengine.engine.handle.timer.TimerHandler

标签: java android andengine


【解决方案1】:

场景说什么

    @Override
    public void onUpdate(float pSecondsElapsed) {

        this.mSecondsElapsed += pSecondsElapsed;
        if (this.mSecondsElapsed >= this.mInterval) {
            if (!this.mPause) {
                this.mSecondsElapsed -= this.mInterval;
            }
            this.mCallback.onTick();
        }
    }

这应该可以解决问题;如果没有暂停,只需将 onTick 移到外面

【讨论】:

  • 如果您这样做,请确保在您使用 .onTick() 回调方法的任何地方,您正在检查计时器是否已暂停并适当地处理。
  • 再一次,我同意这个场景角色 ;) 这将确保它不断被调用,但如果你不希望你的 onTick 在没有暂停的情况下被调用,只需检查你的 onTick ,但请确保更新仍被调用
  • 我想我会坚持你上面的方法。
【解决方案2】:

我将在这里冒险,因为我看不到驱动如何调用 Timer 的 onUpdate 函数的代码,而且我对您正在使用的 IUpdateHandler 接口了解不多。

如果计时器没有暂停,您似乎只是在调用 mCallback.onTick()。

但是,如果 onTick 设置了对 Timer 的 onUpdate 函数的下一次调用,那么当您暂停它并且它“滴答”时,它不会调用 onTick 方法并设置对该函数的下一次调用。

【讨论】:

  • 好点...嗯关于纠正这个问题有什么建议吗?
  • 我想这取决于。这个计时器实现完全是你的,还是你标记的“andengine”的一部分?
  • 我有一个计时器实现,我正在使用它,即使它被暂停,我也让它“滴答”,但我会跟踪剩余的时间。如果暂停,我不会减少金额。这与您正在做的事情非常相似。
  • 如果您这样做,请确保在您使用 .onTick() 回调方法的任何地方,您正在检查计时器是否已暂停并适当地处理。
猜你喜欢
  • 2019-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多