Delta-Zamanı ve bağımsız resim karesi hızı

Favourite 294 favourites
Tutorial written by AshleyOriginally published on 10th, October 2011 - 10 revisions

Translation Team:

1 revision
Just so you know: The English version has been updated since this translation has been published

Resim karesi bağımsız oyunlar, resim karesi hızı her ne olursa olsun aynı hızda çalışan oyunlardır. Örnek vermek gerekirse, bir oyun yavaş bir bilgisayarda 30 FPS’de ( Bir Saniyede Ekrandan Geçen Kare Sayısı) çalışırken daha hızlı bir bilgisayarda ise 60 FPS ile çalışıyor olabilir. Resim karesinden bağımsız bir oyun her iki bilgisayarda da aynı hızda çalışacaktır. (Oyundaki objeler aynı hızda hareket ediyor görülecektir). Diğer yandan, resim karesi bağımlı oyun yavaş bir bilgisayarda ağır çekim efekti varmış gibi yarım hızla çalışacaktır. Resim karesinden bağımsız oyunlar üretmek, hangi tip bilgisayarlara sahip olurlarsa olsun oyuncuların oyunlarınızı oynanabilir ve eğlenceli bulmasını sağlayacaktır. Resim karesi hızı düştüğü zaman oyunlar yavaşlayacak ve bu oyunun oynanabilirliğini etkileyecek, oyuncuların sinirlenmesine ve oynamaktan vazgeçmesine yol açacaktır!

Bu rehber oyunlarınızı nasıl resim karesi hızından bağımsız hale getirebileceğinizi anlatmaktadır. Aynı teknikle oyunlarınızın zaman ayarlaması(time-scaling) yapabilir, böylece yavaş-çekim efektleri kullanabilir ve oyunu kolaylıkla durdurabilirsiniz.

dt sistem ifadesi

Resim karesinden bağımsızlığın anahtarı dt sistem ifadesidir. dt, delta-time ifadesinden gelmektedir. Delta, miktarda bir değişiklik manasına gelmektedir, böylece (delta-time) delta-zaman zamanda bir değişiklik manasına gelir. Son saniyeden (kontrolden) beri (tick), saniyelerde, geçen zamandır.

Örnek vermek gerekirse, 100 fps hızında dt 0,01 (saniyenin yüzde biri) olacaktır ve 10 fps’de ise dt zamanı 0.1 (saniyenin 10’da biri ) olacaktır. Uygulamada, dt saniyeden saniyeye değişiklik göstermektedir, böylece uzun süreler boyunca değer aynı kalmayacaktır.

Dikkat edin, eğer dt’ye her saniye bir değer eklersek, bu her saniyede bir eklenecektir, çünkü bir saniyelik periyotlarda 1 eklenmelidir! ! Burada bir örnek sadece bunu göstermektedir. ( bir objenin olay değerlerine dt eklemek bir objede bir zamanlayıcıya sahip olmak yararlı bir yöntemdir)

dt nasıl kullanılır

Genellikle, resim karesi bağımlı hareket bir olayla bağımlı olarak aşağıdaki gibi çalışır:

Framerate dependent motion
Her saniye (tick) ( her resim karesinde bir kez), obje sağa doğru bir piksel hareket etmektedir. Dikkat edin, bu 30 FPS’de her saniye için 30 piksel manasına gelir, ve 60 FPS’de her saniyede 60 piksel hareket manasına gelir. Bunlar farklı hızlardır, resim karesi hızına bağlıdır.

Yukarıdaki örneği hatırlarsak dt daima her saniyeye bir ekleyecektir. Böylece olayları aşağıdaki gibi değiştirirsek:

Framerate independent motion
… obje her hangi bir resim karesi hızında her saniyede 60 piksel sağa hareket edecektir. dt her saniye 1 eklediği için, 60*dt her saniye 60 ekleyecektir. Bu hem 30 fps ve 60 fps’se objelerimizin her saniye sağa doğru 60 piksel ilerleyeceği manasına gelir – böylece resim karesi hızından bağımsız olarak aynı hız olacaktır.

dt’yi her yerde kullanmak

Bir objeyi sabit bir hızla her zaman hareket ettirebilmek için, resim karesi hızından bağımsızlığı sağlayan yol olan dt ‘yi kullanmak gerekmektedir. Örnek olarak, Sprite’in İleri hareketi objeyi ileri doğru taşıyan piksellerden birkaç tanesini kullanmaktadır. Eğer objeyi sabit olarak hareket ettirirseniz, onu ileriye doğru 60 * dt piksellerle her saniye 60 pikselle cari açıyla devam ettirin.

Davranışlar da dt kullanmaktadır

Construct 2’nin tüm davranışları iç hareket hesaplamalarında dt kullanmaktadır. Bu Platform ve 8 Yöne hareket gibi davranışlarla hareket ediliyorsa özel bir uygulama yapmanıza gerek yoktur – onlar zaten dt yi kullanmaktadır. Ek bir ayara gerek yok!

Dikkat edin Fiziksel hareket bir istisnadır. Otomatik ayarlı olduğu halinde, bunlar dt kullanılmaz ve sonuç olarak resim hızına bağımlıdır. Bu dt ‘nin genellikle küçük rastgele dağılımlarına sahiptir. Bu dağılımlar fizik oyunlarında aynı şey yapıldığı durumlarda bile farklı sonuçlar oluşmasına neden olabilir. Bu durumlar fizik oyunları için sinir edici olabilir, bu yüzden ilk başta fizik davranışında resim hızı bağlı tutulmuştur. Ancak, dt’yi Set Stepping Mode fizik faaliyetinde çalışma sayfasının başında kullan ve Framerate independent ( Resim hızından bağımsız)’ı seçin. Not etmek lazım ki bu mod hala en fazla zaman adımlamasını fizikler için 1/30 ( yaklaşık 33ms) hesaplanabilir, çünkü yüksek zaman adımları seçmek fizik simulasyonlarında dengesizliklere yol açabilir.

Zaman Ayarlaması

Construct 2’deki gerçekten havalı özelliklerden biriside zaman ayarlamasıdır. Oyundaki oran zaman geçişindeki değişime izin vermektedir, bu da zaman oranlama olarak bilinmektedir. Sistemdeki SetTimeScale faaliyeti ile zaman oranını kurabilirsin. 1 zaman oranı normal hız demektir. 0,5 yarım hız manasına gelir ve 2.0 iki katı hız manasına gelir. Eğer oyununuzun zaman oranını 0.1 olarak kurunca, oyun 10 katı daha yavaş hareket edecektir ancak hala normal devam edecektir – iyi bir ağır çekim efekti oluşacaktır!

Zaman ayarlama dt tarafından döndürülen değerin değiştirilmesiyle çalışır. Bu davranışların etkilendikleri ve dt’yi kullandıkları manasına gelir. Eğer hareket hesaplamalarında dt kullanmıyorsanız (yukarıdaki ilk olayda olduğu gibi), hareket zaman ayarından etkilenmeyecektir ! Zaman ayarlamasını kullanmak için, tüm hareketlerde dt’yi doğru olarak kullanmanız gerekir.

Durdurma

Zaman ayarını 0 yapabilirsiniz. Bu tüm hareketleri donduracaktır. Bu oyunu dondurmanın (pause) kolay bir yoludur. Bunu 1 ‘e döndürerek oyunu eski haline getirebilirsiniz.
Oyunu dondurduğunuz halde bazı oyun kontrollerinin hala çalıştığını görebilirsiniz örnek olarak hala basınca ateş ediliyor olabilir. Bunun üstesinden gelmek için oyunun temel oyun olaylarını bir grup altına almalı ve aktif ve deaktif hale getirerek grupları durdurup tekrar aktif hale getirebilirsiniz.

Bu aynı zamanda dt’yi doğru kullanıp kullanmadığınızı test etmek için iyi bir yöntemdir. Eğer bunu doğru kullanırsanız, zaman ayarını 0’a ayarlamak oyundaki her şeyi durduracaktır. Doğru kullanmadıysanız şayet, bazı objeler hareket etmeye devam edecektir, oyunun donduğu varsayıldığında bile olabilir! Böyle durumlarda objelerin nasıl hareket ettiğini kontrol edin ve dt’yi doğru kullandığınıza emin olun.

Hareketlerin diğer tipleri

Hareketlerin tüm tipleri için dt’nin kullanılması gerektiği önemlidir. Bu Dönme ve hızlanmayı içermektedir.

Döndürme

Öncekine benzer şekilde, takip eden olay piggy’i her saniye bir derece döndürecektir:
Framerate dependent rotation
30 FPS’de her saniyede 30 derece ve 60 FPS’de her saniyede 60 derecedir - tekrar, farklı resim hızları için farklı hızlar olacaktır. dt’yi kullanmak problemi çözecektir. Bu yolla piggy, resim değişim hızından bağımsız olarak her saniyede 60 derece dönecektir.

Framerate independent rotation

Hızlanma

Hızlanma da oldukça dolaysızdır. Genelde bu sadece olaylarda özel hareketler oluştururken uygulanır.

Eğer bir hız değişkeniniz varsa, objeniz her saniye Object.Speed * dt*piksel hareket edecektir. Objelerinizin hız değişkeniniz sonuçta her saniyede piksellerle hıza sahip olacaktır.

Objenizi bir saniye boyunca her saniyede 100 piksel hızlandırmak isteyebilirsiniz. Basitçe her saniyede objenin hız değişkenine 100 * dt eklenmesi gerekmektedir. Başka bir ifadeyle, objenin pozisyonunu uyarlamak ve objenin hızını ayarlamak dt’yi kullanarak mümkündür.

Çokça Yapılan Hatalar

Her X saniye ( Every X seconds) koşulunda asla dt kullanmayın! Her 1 saniye olayı resim hızından bağımsız olarak her bir saniye çalışacaktır, sonuçta zaten bu olay resim hızından bağımsızdır. Koşul zamanı ölçmektedir, resim hızını değil. Her 60 * dt saniyede olayını seçerseniz, istemeden koşulu resim hızına bağlı hale getirirsiniz –yapmak istediğinizin aksine! Böyle bir koşul 10 fps’de ( dt = 0.1 olduğunda) veya 100 FPS’de 0.6 saniye ( dt = 0,01) olarak çalışacaktır; eğer sadece her 6 saniyede diye kullanırsanız, zaten resim hızından bağımsız olarak her 6 saniyede bir zaten çalışacaktır.

Üstdüzey Konular

En düşük Resim Hızı

Çok düşük resim hızlarında, dt çok büyük olabilir. Örnek vermek gerekirse, 5 FPS’de dt 0.2 dir. Bir obje saniyede 500 piksel hareket ediyorsa sonuç olarak her saniye 100 piksel hareket edecektir. Bu durum diğer objelerle yanlış kesişmelere veya duvarların içinden ışınlanması “teleport” durumlarına yol açabilir.

Böyle düşük resim hızlarında oyunlar oynanır değildir, ancak böyle durumlarda daha da dengesiz olacaklardır. Çok düşük resim hızlarında da oyunların güvenilir olmasını sağlamak için, Construct 2 dt’nin 0.1’i geçmesine izin vermez. Başka bir değişle, 10 FPS’nin altında bile, dt 0.1’de sabit kalacaktır. Bu aynı zamanda 10 FPS’nin altında oyunların ağır çekim efektiyle hareket edeceği manasına gelir ( resim hızı bağımlı oyunlarki konularda geçen konulardan birinde anlatılmıştı), ancak en azından bu “objelerin ışınlanması (teleporting)” probleminden daha iyi sonuçlanacağı açıktır.

Rastgele Dağılım

Fiziklerde belirtildiği gibi, dt genelde küçük ve rastgele dağılımlara sahiptir, genelde bu bilgisayarlarda ki zamanlayıcıların mükemmel olmamasından kaynaklanır. Fiziklerdeki gibi, oyununuzda küçük rastgele dağılmalara yol açar. Ancak, bunun etkileri oldukça küçüktür ve fiziklerdekilere göre daha az fark edilir. Mükemmel zamanlama gerektiği durumlar (oldukça nadir gerekir) hariç daima dt’yi kullanmanız önerilir.

Obje Zaman Ayarlaması

Sistemde yer alan Objenin zamanını ayarla ( Set object time scale) faaliyetini kullanarak her bir obje için zaman ayarlaması yapabilirsiniz. Bu oyununuzda, örnek olarak, ağır çekimde 0,3 zaman ayarında devam ederken, oyuncunuzun tüm hızıyla 1 hız ayarı ile hareket etmesini sağlamanıza yarar. Bu zaman ayarını 0.3 olarak ayarladıktan sonra obje zaman ayarını oyuncunun zaman ayarını kullanarak belirleyerek yapabilirsiniz. Obje kendisinin dt ifadesine sahiptir ( örnek Player.dt) bu objelerle ilgili tüm hareketler için dt sistemin yerine kullanılacaktır. Bu yolla artık dt’den iki tane değerimiz olacaktır: bir tanesi oyun için ve bir tanesi oyuncu için. Böylece bunlar farklı değerler döndürecektir, oyunun farklı parçaları farklı oranlarda işleyebilir.

Bu örnekte, oyuncuyu oyunun hızına döndürmek için, sistemdeRestore object time scale faaliyetini kullanın.

Sonuç

Oyunu kurarken en başından dt’yi kullanarak tasarlamak önemlidir. Böylece oyunun yoğun olan kısımlarında meydana gelen yavaşlamalarda bile asla hızın düşmemesini sağlayacaktır. Ekstra bir bonus olarak, zaman ayarlaması özelliğini kullanabilirsin, bununla da kolaylıkla oyunu durdurabilir ve de özellikle objelerin tek tek zaman ayarlarını kontrol edebilirsiniz.

Davranışların zaten dt özelliğini kullandığını unutmayın ( Fizikler özelliğinde kullanılmaktadır, kullanılması için sizin aktif hale getirmeniz gerekir). Oyunda tüm kontrol hareketleri kullanılıyorsa, dt konusunda endişelenmenize gerek yoktur! Ancak, çoğu oyun olay-kontrollü (event-controlled) hareketler içermektedir ve bu noktada resim karesinden bağımsız yapmayı hatırlamak önemli olmaktadır.

Unlock your full gamedev potential

Upgrade to the Personal Edition of Construct 2, it has way more features and won't holding back from making money and using your full creativity like the free edition does. It's a one off payment and all Construct 2 editor updates are free for life!

View deals

Plus, it's got a lot of additional features that will help you save time and make more impressive games!

Congratulations on finishing this tutorial!

Did you learn a lot from it? Share it now with your friends!

Share and Copy this Tutorial

You are free to copy, distribute, transmit and adapt this work with correct attribution. Click for more info.

Leave a comment

Everyone is welcome to leave their thoughts! Register a new account or login.