Her şeyden önce, XNA da C # kullanır, bu yüzden aynı programlama dilidir. Altta yatan API DirectX'ten farklılıklar gösterse de, bunun atlama ile ilgisi yoktur, bu nedenle aynı dersler veya cevaplar burada da uygulanmalıdır. Ayrıca, bunu birçok faktöre bağlı olarak uygulamak için sayısız yol vardır. Aşağıda anlatacağım şey, olasılıklardan sadece bir tanesi.
Temel Fizik Gereksinimleri
Öncelikle güncelleme döngüsünde bazı temel fizik değişkenleri ve hesaplamaları gerekir. Özellikle, tanımlanmış konum, hız ve yerçekimine ihtiyacınız var ve güncelleme döngünüz buna aşağı yukarı benzer bir şey yapıyor olmalı (çarpışma tespiti ve cevap basitliği için ihmal edilmeli):
float positionX, positionY; // Position of the character
float velocityX, velocityY; // Velocity of the character
float gravity = 0.5f; // How strong is gravity
void Update(float time)
{
positionX += velocityX * time; // Apply horizontal velocity to X position
positionY += velocityY * time; // Apply vertical velocity to X position
velocityY += gravity * time; // Apply gravity to vertical velocity
}
Sabit Yükseklik Atlama
Şimdi, her zaman aynı yüksekliğe sahip bir sıçrama uygulamanın en kolay yolu, tuşa ne kadar basarsanız basılmaksızın, dikey hızı bir kez değiştirmek. Bu, karakterin yükselmeye başlamasına neden olurken, yerçekimi otomatik olarak onu aşağıya çekmekle ilgilenir:
void OnJumpKeyPressed()
{
velocityY = -12.0f; // Give a vertical boost to the players velocity to start jump
}
Önemli Karakteriniz yerde değilse bir sıçrama başlatmak istemezsiniz, bu nedenle bunun için bir kontrol eklemeniz gerekir.
Değişken Yükseklik Atlama
Ancak Mario ve Sonic gibi oyunlar, atlama yüksekliğinin düğmeye ne kadar uzun basacağınıza bağlı olarak değişken bir zıplamaya sahip. Bu durumda her iki basarak işlemek gerekir ve atlama tuşu bırakmadan. Gibi bir şey ekleyebilirsiniz:
void OnJumpKeyReleased()
{
if(velocityY < -6.0f) // If character is still ascending in the jump
velocityY = -6.0f; // Limit the speed of ascent
}
Yukarıdaki koddaki tüm bu değerlerin (örneğin 0.5
, -12.0f
veya gibi sayılar -6.0f
) ince ayarlanması, zıplama hissinizi, ne kadar yüksek atladığı, zıplama düğmesini bıraktıktan sonra bile ne kadar momentum tuttuğu, ne kadar hızlı düştüğü, vb. .
Önemli Bu fonksiyonları her kareye çağırmayın. Tuşa basıldığında veya bırakıldığında yalnızca bir kez arayın. Aksi halde karakterin zıplamak yerine uçacak.
Çalışma örneği
Tarayıcınızı burada deneyebileceğiniz, yukarıda açıklanan tekniklerin hızlı bir örneğini hazırladım (atlamak için fare düğmesine basın, atlamanın yüksekliğini kontrol etmek için ortada bırakın). JS'de ama daha önce de belirttiğim gibi, bu durumda dil konu dışı.
http://jsfiddle.net/LyM87/