Libgdx定时器暂停失焦?

时间:2016-09-19 19:06:31

标签: libgdx

我注意到如果我在默认的,新创建的LibGDX项目中使用GDXs Timer类,它将在应用程序最小化或无法聚焦时根本不会触发。 至少在桌面部署Windows 10上也是如此。

JAVA自己的计时器类,同时,无论焦点如何都会触发。 一个简单的示例应用程序来演示差异;

@Override
public void create () {

    //gdx timer (does not update when focus lost);
    //------------------
    com.badlogic.gdx.utils.Timer.schedule(new com.badlogic.gdx.utils.Timer.Task(){
        @Override
        public void run() {                                
            long currentTime = System.currentTimeMillis();    
            Log.info("____GDX_____________________:"+currentTime+"_________");                
        }
    }
    , 0  
    , 1.0f ); 


    //java timer (updates when focus lost);
    //-----------------
    Timer test = new Timer();
    test.scheduleAtFixedRate(new TimerTask() {        
        @Override
        public void run() {
            long currentTime = System.currentTimeMillis();    
            Log.info("___JAVA____________________:"+currentTime+"_________");    
        }          
    }, 0, 1000);
}

运行它可以清楚地看到两个日志在焦点时都会触发,而只有焦点处于焦点状态时才会触发。

我的问题是

a)是否期望LibGDXs计时器的行为,或者我在设置中做错了什么? LibGDXs计时器的描述似乎没有提到自动暂停。

b)我希望我的应用程序在后台运行,除非明确暂停。仅仅说,alt + tabbing应该不够。 我应该切换到使用JAVA计时器吗?这是否具有跨平台的影响?

谢谢, Darkflame

1 个答案:

答案 0 :(得分:2)

a)是的,处理Timer的TimerThread文档说:

  

管理单个计时器线程。在libgdx应用程序上停止线程   暂停和处理,在恢复时启动线程。

b)由于libGDX Timer没有什么特别的东西,只有一个Thread,它监听应用程序的更改(暂停,恢复等),任务列表,使用Java的定时器应该没问题。由于它来自1.3(并且libGDX目标是1.6),因此它不应该具有任何跨平台的含义。