Hem X hem de Y ekseninde hareket eden çeşitli nesnelerin bir animasyonunda bir sonraki kareyi hesapladığım bir fonksiyon var [bunu frameRender()
olarak adlandırıyorum] ve sonuçta meydana gelen kareyi nesnelere uygulayan bir işlev [frameDisplay()
olarak adlandırıyorum]. Nesneler sadece A noktasından B noktasına gitmez, sürekli olarak hareket ederler, daima yeni hedef koorları alırlar.'u 1000/frameRate
aralıkla kullanıyorum, ancak tarayıcıların doğru zamanlamaları olmadığı için hiç işe yaramıyor.Tüm sistemlerde tüm tarayıcılarda JavaScript animasyonu aynı hızda nasıl oynatabilirim?
Sorun: Animasyonun sabit bir kare hızına sahip olduğundan nasıl emin olabilirim ve tüm sistemlerde tüm tarayıcılarda aynı hızda çalışır mı? Her şeyi denedim ve sadece farklı tarayıcılarda bile doğru bir sonuç elde edemiyorum (Firefox ve Chrome'da test ediyorum, Chrome genellikle çok daha hızlı görüntüler).
Sonuç şöyle olmalıdır: Yavaş oynatıldığında, animasyon aralığı ilk önce düşmeli ve daha sonra doğru oynatılıncaya kadar DOM yavaş görünüyorsa bazı kareleri atlamaya çalışın [frameDisplay()
'u atlayarak]. Hızlı oynatıldığında, animasyon aralığı artar, bu da animasyonun doğru hızda oynamasını sağlar.
Ancak, bunların hepsinde tutarlılığı nasıl korursunuz, çünkü tarayıcıların ne zaman yavaşlayacağından veya hızlı performans göstereceğinden her zaman emin olamazsınız. Örneğin, devasa büyük hareketler varsa ve kare hızını sabit tutmak için aralığı düşürüyoruz ve sonra aniden hareketli nesnelerin çoğu durur ya da çok fazla hareket etmez, aniden hızlıca gerçekleşir!
Herhangi bir fikrin var mı?
Yani temel olarak çerçeve oluşturma matrisini bir delta değişkeni içerecek şekilde değiştirmem gerekiyor, yani örneğin önceki nesneyi geçen XY pikselleri gibi bir nesneyi taşıyabilir miyim? – stagas
@stagas - tam olarak. Bu şekilde, bir güncelleme 50 ms içinde ve diğeri ise 450 ms'de ise, başvurunuzu demek istediğimi elde ederseniz yine de "500 ms işareti" olmalıdır. – Matt
Cool, bunu hemen deneyeceğim Teşekkür ederim ( – stagas