2017-04-24 80 views
1

我想創建像其他遊戲一樣的每日獎勵,所以我從Apache調用commons-net-3.6庫來獲得當前網絡時間。然後,我寫了這個代碼:libGDX:當我打電話給服務器主機時凍結我的遊戲

NTPUDPClient timeClient = new NTPUDPClient(); 
String TIME_SERVER = "time-a.nist.gov"; 
InetAddress inetAddress = InetAddress.getByName(TIME_SERVER); 
TimeInfo timeInfo = timeClient.getTime(inetAddress); 
long returnTime = timeInfo.getMessage().getTransmitTimeStamp().getTime(); 
Date time = new Date(returnTime); 
System.out.println(time); 

但是,有時做工精細,有時候不是作品和凍結我的遊戲(沒有響應),WHY?

對不起我的英文不好。

回答

1

你是否在單獨的線程上調用此代碼?

這不能在libgdx渲染線程上完成,它必須在一秒鐘內調用至少60次。向服務器發出請求是非常耗時的,並且會阻塞線程直到完成。如果請求不是異步的,則必須在單獨的線程上運行它。

最簡單的方法(但不是最好的)就是這樣做

new Thread() { 
    public void run(){ 
     //Here you need to do the request 
    } 
}.start(); 

您可以在這裏找到更多信息 https://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html

相關問題