暂停计时器并恢复

时间:2012-08-06 18:38:01

标签: java android andengine

这是我用来控制间隔的计时器类。欢迎任何人使用它。

我遇到的问题是暂停和恢复。它正确地停顿,但当我尝试使用我的简历()时,它不会恢复时间。有什么想法吗?

    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
        }
        }
}

2 个答案:

答案 0 :(得分: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移动到外面

答案 1 :(得分:0)

我将在这里走出困境,因为我看不到驱动Timer如何调用onUpdate函数的代码,而且我对你正在使用的IUpdateHandler接口知之甚少。

如果计时器没有暂停,看起来你只是调用mCallback.onTick()。

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