emin2045' Alıntı:
Get Mouse Velocity diye bir fonksiyonum var, mouse kontrolü için. Gördüğünüz üzere Get World Delta Seconds diye fonksiyonum var bu da yaklaşık 0,067 gibi bir sayıya eşit oluyor her frame de. Fonksiyonum doğru çalışıyor, ama ben tam olarak bu Get World Delta Seconds fonksiyonun işlevi nedir tam anlamadım.
https://prnt.sc/uv98m2
Öncelikle bu konuları anlamak için Tick nedir çok iyi anlamış olmak gerekiyor. Tekrar bakmak öğrenmek isteyenler için şu linkte benim yazdığım açıklama faydalı olacaktır:
http://www.unrealengineturkiye.com/bcanevertick-konusu.html
GetInputMouseDelta : Bir önceki kareden beri ya da diğer bir deyişle bir önceki tick ten beri X te ve Y de yani yatay düzlemde ve dikey düzlemde kaç birim hareket etti (Mesela bir birim 1 cm se eğer Kaç santim yatayda gitti kaç santim dikeyde gitti)
GetWorldDeltaSeconds: Bir önceki kareden beri ya da diğer bir deyişle bir önceki tick ten beri kaç saniye geçti. Mesela senin ki bir seferinde 0,067 sn. vermiş. Bu sabit her tick aynı değildir. Mesela tick mantığının yukarıda anlattığım işleyişinden dolayı bir tick arasında çok işlem çıkmıştır, çok vakit geçmiştir ve sonuç 0,081 gibi bir rakam çıkabilir. Ya da o sırada arkada virus programı çalışmaya başlamıştır 0,095 çıkabilir. Ya da Windows kendisi ekran kartı ile ilgili bizim bilmediğimiz bir servis başlatmıştır vb. gibi. Bunun tam tersi de olabilir. İşlemler çok hızlı bitmiştir. 0,01 saniye gelmiş olabilir. Arka planda bir kaç işlem kapanmıştır 0,02 gelir vb. Yani DeltaSeconds kaç olacak önceden bilmemiz mümkün değildir.
Şimdi sorunun aslına gelecek olursak:
Olayı kolay anlayabilmek için durumu idealize edip basitleştireceğiz. Bir kişinin mouse unu yatay eksende (yani X ekseni oluyor) saniyede 1 cm olacak şekilde sabit ve değişmeyen bir hızla sağa kaydırdığını düşünelim. Bu durumda gerçek hayatta bu kişiye baksak 3 saniye sonra mausunu 3 cm sağa çekmiş olduğunu görürdük. Ancak oyun açısından bakacak olursak (Oyun çok ağır ve bilgisayarımız da çok yavaş olsun) oyun sadece 3 tick geçirmiş olduğunu farz edelim. Evet ideal test ortamını kurduk.
Bu şartlar altında ticklerin ne zaman "tick" lediklerini yani gerçekleştiklerine bakacak olsak muhtemelen şöyle bir resimle karşılaşacağız. (Burda anlatmak için sayıları kafadan atıyorum.)
1.Tick 0,85 sn.
2. Tick 0,75 sn.
3. Tick 1.40 sn.
Yani 1 sn 1 sn 1 sn. gibi sabit bir şekilde tick zamanı almamız imkansız yukarıda anlattığım nedenlerden ötürü.
Şimdi burda sen velocity (bağıl hız mı deniyor bizde bilmiyorum) yi bulmak istiyorsun. Aslında yukardaki ideal durumda velocity nin 1 cm/sn olduğnu kafadan bulabiliyoruz gerçek hayattaki durumu söylediğim için. Ancak gerçek durumda bu adamın ne kadar hareket ettirdiğini bilemiyoruz sadece GetInputMouseDelta ile bir önceki tickten sonra kaç birim hareket ettiğini ve GetworldDeltaSecons ile de o zamandan bu yana kaç saniye geçtiğini biliyoruz sadece. Bu durumda hareket miktarını (mesela 1 cm yukarıda ki örneğe göre ) aradan geçen zamana ( 0,85 yukardaki birinci tick örneğine göre) bölersek mantıklı bir velocity bulmuş oluruz. Yukardaki örnekte gerçek hayatta mouse un bulunacağı yerler şöyle olacaktır.
1.Tick 0,85 cm.
2. Tick 0,75 cm.
3. Tick 1.40 cm.
Dolayısı ile velocity hesabı birinci karede 0,85/0,85 ten 1 cm/sn. ikinci karede 0,75/0,75 ten yine 1 cm/sn vb. hep doğru çıkacaktı. Kişi mouse hangi hızda götürür se götürsün cevap hep doğru çıkacaktır. mesela saniyede 1 cm değilde 2 cm hareketli olsa bu seferde cevaplar yine doğru çıkacatı. Sonuç olarak yaptığın bu işlem şahsın elindeki mouse u ne kadar hızlı götürdüğünü tick zamanına göre doğru olarak hesaplıyor ve veriyor.
Başka bir şekilde anlatıyorum aynı şeyi:
Bir şeyi 10 cm hareket ettirmiş olmamız onu velocity sini bize tek başına veremez. Saniyenin kaç ta kaçında 10 cm gitti. 0,1 sn. demi yok sa 0.9 sn. demi. Bunu da göz önünde bulundurmak zorundayız. 0,1 sn de gitmişse 0,9 sn yede gidene göre 9 kat hızlı demektir. 10/0,1 = 100 velocity çıkar. 10/0,9= 11,11111111 velocity çıkar (arada 9 kat fark var). Yani yol/zaman her zaman velocity yi verir.
Umarım açıklayıcı olmuştur.
Kolay gelsin.