Bununla ilgili gerçek numara, lise düzeyinde bilimdir; hangi gerekir yaptık. Yaptığın durumunda hızlı bir Google arama alacak değil başlamıştır . 'Acemi' zihniyetten nasıl uzak durduğunuzu açıklamak için ay arazi örneğini alın.
Bir kere okuduğunuzda [change in position] = [velocity] * [time passed]
, bu değişkenleri takip etmenin gerekli olacağı netleşti:
float x, y; // Your X and Y co-ordinates.
float vx, vy; // Your X and Y velocity.
float deltaTime; // Change in time.
Bundan sonra, hızı her karenin konumuna uygularsınız:
// Change X by the velocity multiplied by the time.
x = x + vx * deltaTime;
y = y + vy * deltaTime;
Şimdi her karenin hızını değiştirmek istiyoruz ki yerçekimi ekleyebilelim. Tam olarak aynı kaynağa göre [change in velocity] = [acceleration] * [time passed]
. Bu nedenle aynı prensibi uygulayabiliriz:
const float gravity = 9.8f; // The gravity of the earth.
// Add gravity to the vertical velocity.
vy = vy + gravity * deltaTime;
// Change X by the velocity multiplied by the time.
x = x + vx * deltaTime;
y = y + vy * deltaTime;
Şimdi oyuncunun uzay aracını kontrol etmesi için bir yola ihtiyacınız var. Temel fizik hakkında daha fazla okumaktan hareketin kuvvetin sonucu olduğunu öğreneceksiniz - bir kaynak bulamıyorum ama [change in acceleration] = ([force] / [mass]) * time
(hatırladığım kadarıyla). Böylece oyuncu bir tuşa bastığında, basitçe fx
ve fy
değişkenlerini bir şeye ayarlayacak ve denkleminizi güncelleme sırasında uygulayacaksınız.
Sonuçta oyununuzdaki nesnelerin etrafındaki fiziği düşünmeniz gerekir - ve onları düşündüğünüz gibi hareket ettirmeye çalışmak yerine , denklemi arayın .
Gelecek Not: Bunun kesinlikle fizik yapmanın en iyi yolu olmadığını unutmayın (buna Euler Entegrasyonu denir ve düşük kare hızında bazı garip senaryolara yol açabilir) - başka şeyler yapmanın yollarını aramanız gerekir (Bu makalede oldukça çıplak temelleri de güzel yazma). Ancak, Euler Integration ile bağlantıda kalın, çünkü bir şeyi daha az öğrenmeye çalışıyorsunuz demektir.
Hangi oyunlar size doğru zihniyette düşünmeyi öğretir?
İşleri doğru yaptığınızı ve doğru zihniyetle yaptığınızı nasıl test edersiniz? Sleep(10 milliseconds)
Oyun döngünüze bir a ekleyin ve her şey hala tam kare hızıyla aynı şekilde hareket etmeli ve tepki vermelidir.
Son olarak, 2D oyunların çalışmasını sağlama konusunda iyi bir deneyime sahip oluncaya kadar lütfen 3D'den (ve dolayısıyla Quaternions ve Matrices'ten) uzak tutun. Oldukça az sayıda oyun geliştiricisinin Quaternions veya Matrices'in nasıl çalıştığını gerçekten bilmediğini - ancak yalnızca nasıl kullanılacağını bilmediğini - onlara daha sonra yaklaşmalarını (ya da asla, 2D oyunların çok eğlenceli olduğunu ve oldukça eğlenceli olabileceğini söylemeye teşebbüs etmek istiyorum] diyeceğim. başarılı). Bunu temel düzeyde yapmak için gerçekten lineer cebiri bilmeniz ve bunun gibi bir şey yapmanıza gerek yoktur (ancak gerçekten yardımcı olur, eğer yapabilirseniz bazı gece sınıflarına gidin).
Nihai Bonus: my resim öğretmeni hep bana bir şey "ne çizmiyorsun olduğunu düşünüyorum Gördükleriniz çizmek, bkz." Aynı şey burada da geçerlidir "ne düşündüğünü modelleme ( object.position++
), ne olacağını modelleme (` object.position + = velocity * time) "- en azından makul sınırlar için (tamamen doğru bir sistemi modellemiyorsun, ama iyi bir taklit olan şey).