Dürtülü atlama


12

Beni şaşırtan bir şey var ve bir platformcuya 'sahte dürtü' atlamayı nasıl uygulayacağınız. Ne hakkında konuştuğumu bilmiyorsanız, Mario, Kirby ve Cave Story'den Alıntıyı düşünün. Onların ortak noktaları ne? Atlamanızın yüksekliği, atlama düğmesini ne kadar basılı tuttuğunuza göre belirlenir.

Bu karakterin 'dürtülerinin' gerçek fizikte olduğu gibi sıçramalarından önce değil, havada iken yapıldığını bilmek - yani, parmağınızı maksimum yüksekliğin ortasında çok iyi kaldırabilirsiniz ve onunla tam durak arasındaki mesafeyi azaltma; Bu yüzden sadece bir hop için dokunup uzun bir sıçrama için tutabilirsiniz -, onların trajedilerini yay olarak nasıl korudukları ile büyüleniyorum.

Mevcut uygulamam şu şekilde çalışıyor:

resim açıklamasını buraya girin

Atlama düğmesine basılırken, yerçekimi kapatılır ve avatarın Y koordinatı, yerçekiminin sabit değeri tarafından azaltılır. Örneğin, işler işaret başına Z birimine düşerse, işaret başına Z birimini yükseltir.

Düğme bırakıldığında veya sınıra ulaşıldığında, avatar hızı 0'a ulaşıncaya kadar X birimini kaplayacak bir miktarda azalır; Bir kez, hızı yerçekimi ile eşleşene kadar hızlanır - örneğe bağlı kalarak, hala X birimlerini kaplarken 0'dan Z birimine / kene hızlandığını söyleyebilirim.

Bununla birlikte, bu uygulama atlamaları çok çapraz hale getirir ve avatarın hızı yerçekiminden daha hızlı olmadığı sürece, mevcut projemde çok hızlı olur (kene başına yaklaşık 4 piksel hareket eder ve kene başına yerçekimi 10 pikseldir, 40FPS'lik bir kare hızı), aynı zamanda yataydan daha dikey hale getirir. Platformculara aşina olanlar, karakterin arkının zıpladığını, oyunun yerçekimi kadar hızlı olmasalar bile neredeyse her zaman daha fazla zıplamalarına izin verdiğini ve doğru oynanmazsa, kendini kanıtladığını fark edeceklerdi. çok sezgisel. Bunu biliyorum çünkü uygulamamın çok can sıkıcı olduğunu kanıtlayabilirim.

resim açıklamasını buraya girin

Hiç kimse benzer mekaniği denedi ve hatta başarılı oldu mu? Bu tür bir platformcu zıplamasının arkasında ne olduğunu bilmek istiyorum. Daha önce bu konuda herhangi bir deneyiminiz olmadıysa ve bir şans vermek istiyorsanız, lütfen doğru yolda olmadıkça açıkladığım uygulamayı düzeltmeye veya geliştirmeye çalışmayın - çözümünüzü kaşımak. Yerçekimi, fizik ya da ne olursa olsun umursamıyorum, bu sahte dürtülerin nasıl çalıştığını gösterdiği sürece işi yapar.

Ayrıca, sunumunun dile özgü bir kodlamadan kaçınmasını istiyorum; bize bir C ++ örneği veya Delphi paylaşmak gibi ... Projem için XNA çerçevesini kullandığım ve C # şeyler sakıncası olmaz gibi, başkalarının kodunu okumak için çok sabrım yok ve ben diğer dillerin bazı oyun geliştiricileri burada elde ettiklerimizle ilgilenecekler, bu yüzden sözde kodlara bağlı kalmayın.

Önceden teşekkürler.


3
Aşağıdaki soruya ve cevaplarına baktınız mı? gamedev.stackexchange.com/questions/29617/…
bummzack

@bummzack Bu da çok net.
Mutoh

1
Atlama kullanımı ve yerçekiminin olası kopyası Güzel resimlere sahip olmasa da, aynı soru.
MichaelHouse

Yanıtlar:


8

Bence asıl sorunun burada yatıyor:

Atlama düğmesine basılırken, yerçekimi kapatılır ve avatarın Y koordinatı, yerçekiminin sabit değeri tarafından azaltılır. Örneğin, işler işaret başına Z birimine düşerse, işaret başına Z birimini yükseltir.

Yerçekimi böyle çalışmaz. Google, ayrıntılar için "tekdüze hızlandırılmış hareket", ancak basit bir ifadeyle, başka bir üyenin söylediği gibi, yerçekimi bir hız değil, bir ivmedir.

Hız değişim sabit oran ise, basitçe söylemek gerekirse pozisyon zamanla hızlanma değişim sabit oranıdır hız zamanla.

Bu nedenle, ilk iş siparişiniz düşen algoritmayı sadece hızı değil, ivmeyi içerecek şekilde değiştirmek olacaktır. Onun yerine:

pos_y = pos_y + (velocity_y * time_difference)

gibi bir şey yapmalısın

pos_y = pos_y + (velocity_y * time_difference) + (gravity_y * (time_difference ^ 2) / 2)
velocity_y = velocity_y + (acceleration_y * time_difference)

Bu şekilde her şey fiziksel olarak doğru hareket olan bir parabolün içine düşecektir.

Şimdi, basit atlamayı uygulamak için (bundan hemen sonra tam sorunuza ulaşacağız), sadece velocity_yistenen bir değere ayarlıyorsunuz . İşareti acceleration_yve istediğiniz velocity_yfarklı olduğu sürece , nesneniz doğru bir şekilde atlar (Diğer bir deyişle, "yerçekimini kapatmazsınız." Açık tutarsınız ve nesnenin hızını önceden tanımlanmış bir değere ayarlarsınız).

velocity_yAtlamaya başladığınızda ne kadar büyük olduğunu göreceksiniz, atlama o kadar yüksek olacaktır. Böylece istediğiniz efekti uygulamak için zıplamaya bir tür hızlanma eklersiniz (fiziksel terimlerle, bu bir kuvvet eklemek anlamına gelir. Nesneye küçük bir roket eklemeyi düşünün).

Bunu yapmak için, öncekiyle aynı şeyi yaparsınız, ancak şimdi hızlanma ve hız aynı işarete sahip olmalıdır. Bu düğmeye basıldığında yapılır:

pos_y = pos_y + (velocity_y * time_difference) + (force_y * (time_difference ^ 2) / 2)
velocity_y = velocity_y + (force_y * time_difference)

4

Çözüm yavaşlamayı geciktirmek değildir. Bir topu havaya fırlattığınızda, maksimum yüksekliğine ulaşana kadar sabit bir hızda hareket etmez, ancak dürtü anından yavaşlar.

Yerçekimi bir hız değil, bir ivme. Yani bir oyuncunun hızı 20 birim ve yerçekimi -10 birim ise, bir sonraki işarette, yukarı doğru 10 birim, bir sonraki, 0 birim vb.

Atlamalarınızın bu kadar çapraz görünmesinin nedeni, oyuncunuzun hızını ve hızını sabit tutmasıdır. Dolayısıyla, kelimenin tam anlamıyla oynatıcının yolunu izleyen bir çizgi çizerseniz, x konumundaki değişiklik üzerinde yerçekimi değerinizin pozitif veya negatif eğimine sahip bir çizgi görürsünüz.

Oyuncunuzun atlayışınızın yüksekliğini kontrol etmesi için, oyuncunuza dürtü üzerinde bir miktar başlangıç ​​hızı verilmeli, yerçekimi kapatılmalı ve oyuncunun hızına özel bir yerçekimi değeri (normal yerçekiminden daha az) uygulanmalıdır. Atlama düğmesi bırakıldığında veya oyuncu hızı 0'a ulaştığında, normal yerçekimi uygulanmalıdır.

Bu şekilde, oyuncu, normal yerçekimi ile yavaşlasalar da yavaşlasalar da, atlama sırasında hoş bir eğri görürler.


2

Kısa öykü: Atlama yayınızda bir yerde parabolik olmayan bir bölüm olacak.

Atlamayı uygularken birkaç yaklaşım denedim:

  • Sabit tırmanış: Bu aslında denediğiniz şey gibi görünüyor: düğme serbest bırakılana kadar pozitif dikey hızın sabit tutulması, bu noktada normal yerçekimi devreye giriyor. Ark yükselişte diyagonal, ancak sonbaharda normal - bu aslında normalde iyi görünüyor ve (daha da önemlisi) iyi hissettiriyor, çünkü zıplamanın yüksekliğini iyi değerlendirmek oldukça kolay.

  • Tutuklanan tırmanış: Bu, karakterin maksimum yükseklik parabolünde artan, başlangıçtaki bir dürtü uyguladığınız yerdir. Ardından, düğme bırakıldığında, dikey hızı sıfıra (veya küçük bir yukarı doğru hıza) ayarlarsınız. Bu, en büyük sıçramalarınızın garantili bir parabol olduğu anlamına gelir ve daha küçük sıçramalar, daha sonra büyük bir sıçrama yapıyor ve yavaşlar gibi hissediyor.

  • Değişken ilk dürtü: Bu benim tercih ettiğim şey: atlama atlama, bir hop için yeterli bir yukarı doğru dürtü uygular ve daha sonra kısa bir süre - atlama penceresi - düğmesi serbest bırakıldı. Atlama penceresi kapandıktan sonra, hareket parabolik olacaktır ve değişken ilk dürtü süresi tuhaf görünmeyecek kadar kısaydı, ancak deneyimli bir oyuncuya atlama yüksekliğini kontrol etmek için yeterli kapsam verecek kadar uzundu. Dezavantajı, pencere çok daha küçük olduğu ve serbest bırakma anının yüksekliğe karşılık gelmediği için atlama yüksekliğini yargılamak o kadar kolay değildi. Çoğu zaman olduğu gibi, ya bir musluk ya da tam bir sıçrama istediniz, bu yüzden böyle bir sorun değildi.

Bunları deneyin ve hangisinin en iyi hissettiğini görün.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.