"Delta zamanı" eskiden iki kare güncellemesi arasında geçen süreydi (ancak diğer bağlamlarda da kullanılabilir; bu genellikle bir zaman çıkarma işleminin sonucudur).
GlutGet yöntemini ve GLUT_ELAPSED_TIME parametresini ve bazı işlemleri kullanarak delta süresini delta olarak alabilirsiniz .
Aşağıdaki satır glutInit çağrıldığından (veya ilk glutGet çağrısında (GLUT_ELAPSED_TIME)) milisaniye sayısını döndürür:
int timeSinceStart = glutGet(GLUT_ELAPSED_TIME);
Dolayısıyla, geçerli timeSinceStart'ı her oluşturma döngüsünde kaydederseniz, eskisini yenisine çıkararak deltaTime'ı öğrenebilirsiniz.
int oldTimeSinceStart = 0;
while( ... )
{
int timeSinceStart = glutGet(GLUT_ELAPSED_TIME);
int deltaTime = timeSinceStart - oldTimeSinceStart;
oldTimeSinceStart = timeSinceStart;
//... stuff to update using deltaTime
}
Bunu, clock () ile C / C ++ ctime kütüphanesini ve bir saat işareti ile bir saniye arasındaki ilişkiyi belirten CLOCKS_PER_SEC makro sabit ifadesini kullanarak hemen hemen aynı şekilde yapabilirsiniz .
Temel olarak, sabit bir zaman değeri kullanmak yerine hareketlerinizi bu geçen süreye oranla güncellemek için deltaTime kullanabilirsiniz. Bu şekilde, programınız 60 fps'de veya 10 fps'de çalışıyorsa, karakterinizin hareket hızı neredeyse aynı olmalıdır.
Küçük bir örnek: bir şeyi x ekseninde saniyede 10 birim taşımak istediğinizi varsayalım. Böyle bir şey yapabilirsiniz (deltaTime gerçekten milisaniye kullanırsa).
Position.x += 10/1000 * deltaTime;
Bu şekilde, programınız ister 2 kez ister 100 kez güncellensin, 1 saniye sonra konumun hemen hemen aynı olması gerekir ve oyun oynama, küçük bir bilgisayarın düşük fps'sinden sabit değerler kullanmasından daha az etkilenir.
Sabit değerlerle ==> düşük fps = daha az güncelleme = yavaş hareketler, yüksek fps = daha fazla güncelleme = çok hızlı hareketler.
DeltaTime ==> "neredeyse" aynı hareketleri ile.
Son olarak, gamedev.stackexchange'te Sabit zaman adımı ve Değişken zaman adımı'nı okumalısınız.