我正在使用Java,我正在制作游戏.在这个游戏中,实时是非常重要的一部分.出于这个原因,我试图使用Ntp获得实时.
我在网上找到的是这段代码.
import java.net.InetAddress; import java.util.Date; import org.apache.commons.net.ntp.NTPUDPClient; import org.apache.commons.net.ntp.TimeInfo; public class test{ public static void main(String args[]) throws Exception{ String TIME_SERVER = "time-a.nist.gov"; NTPUDPClient timeClient = new NTPUDPClient(); InetAddress inetAddress = InetAddress.getByName(TIME_SERVER); TimeInfo timeInfo = timeClient.getTime(inetAddress); long returnTime = timeInfo.getReturnTime(); Date time = new Date(returnTime); System.out.println("Time from " + TIME_SERVER + ": " + time); } }
我的问题是使用这个,系统仍然得到System.currentMillis(); 因为它实际上会打印出本地机器获取时间消息的时间.因此,如果玩家将桌面时间改为未来,游戏时间也会发生变化.
如果有人可以帮忙以获得实时我会非常感激.PS我没有服务器,我的游戏将在Kongregate上播放,数据将在播放器计算机上.
提前致谢.
只需在程序开始时通过NTP获取一次,然后使用System.nanoTime()获取之后的相对时间.它完全是单调的,不会通过设置系统时间来改变.