Ne zaman bir fizik motoru kullanmalıyım? [kapalı]


12

Öğrendiğimden beri Box2D'yi , bir şeyi test etmek için çok küçük prototiplerden veya küçük programlardan gerçek projelere kadar yazmaya çalıştığım oyun benzeri bir uygulama için kullanıyorum.

Bu sayede çarpışmalardan gerçek fiziğe kadar her şeyi idare etmek çok kolay.

Bununla birlikte, bazen, bazı şüphelerim var: eğer sadece çevreleri veya AABB'yi ele almam gerekiyorsa ve gelişmiş fizik araçlarına (eklemler veya bunun gibi şeyler) ihtiyacım yoksa, bir fizik motorunun bir çeşit büyük ekleyebileceğini düşünüyorum, gereksiz yük.

Sorumu tekrar sormak için: fiziğin gerçekten basit olduğu bir oyunda (Süper Mario gibi) Box2D'yi (veya diğer fizik motorlarını) kullanır mıydınız? Ve değilse, neden?


2
Doğru olanı yapın. Oyununuzun bir fizik motoruna ihtiyacı olduğunu düşünüyor musunuz? Mario'nun Box2D'den yararlanacağını düşünüyor musunuz? En yeni Mario kesinlikle güzel fizikle hoş bir his veriyor, ancak Box2D'de gördüğüm herhangi bir şey gibi hissetmiyor.
Jeff

@Jeff: Bu, "Ne zaman Box2D kullanmalıyım?" veya "Ne zaman bir fizik motoru kullanmalıyım?". Yeni Mario kesinlikle bir fizik motoru içeriyor.

1
@Joe Wreschnig: Evet, ama fizik motorunun kullanılmadığı bir durum var mı? Sadece düşünebildiğim zaman bir metin macerası ya da işaret et ve tıkla. Sanırım fizik motoru tanımınızı ne kadar genel yapmak istediğinize bağlı
Jeff

@Jeff: Birkaç (fizik dışı) bulmaca oyununa ihtiyaç vardır, örneğin Tetris, Bejeweled. Aksiyon oyunlarında, çoğu 2D shmup'un bir fizik motorundan faydalanmadığını iddia edebilirim, çünkü genellikle sadece AABB / daire örtüşme kontrollerine, çarpışma tepkisine, kesinlikle sabit hareket yollarına ve sabit hıza ihtiyaç duyarlar. Platformcular tamamen fizikle ilgilidir.

Yanıtlar:


8

Box2D için kullanılan bellek, disk alanı, geliştirme çabası veya işlemci süresi sizin amacınız için çok fazlaysa, kullanmayın. Aksi takdirde, yararlı bulursanız bundan kaçınmak için bir neden yoktur.


2
Gerçekten hepsi bu kadar. Hayatınızı kolaylaştırır ve sizi istediğiniz platformlardan engellemezse, bir kısmını kullanmasanız bile bu bir kazançtır.

1
Veya başka bir deyişle - "Tekerleği yeniden icat etmenin tek nedeni, tekerleği yeniden icat etmeyi öğrenmektir."
Exilyth

4

Süper Mario kadar kolay bir şey yok, çünkü çok fazla fiziği yok. (Mario zıplamasıyla diğer nesnelerin fiziğini etkilemez)

Eğer fizik diğer nesnelerin sonuçlarını etkilemek için fizik kullanarak birden fazla öğe (birden fazla) anlamında kullanıyorsanız, o zaman bir motor kullanırdım.


Öte yandan, Mario, bir fizik motoruyla "ücretsiz" olarak aldığınız ve sadece basit sınırlayıcı örtüşme kontrolleri olmayan momentum, hızlanma, değişken boyut ve yönlü çarpışmalara sahiptir.

Kabul ediyorum - çoğu zaman bir fizik motoru size kendinizi uygulamak için biraz zaman kaybı olacak birçok şey verecektir.
Christopher Horenstein

3
Doğru, her zaman tekerleği icat etmemek daha iyidir, sadece bir tekerlek istersem, bir araba için bir plan almayacağım. Bunun da ötesinde, bir bütün olarak oyununuz hakkında daha fazla bilgi sahibi olacaksınız ve fiziği değiştirmek / değiştirmek daha kolay olacak.
Spooks

1
Bu gerçekten korkunç bir benzetme. Bu daha çok, bir tekerlek ve akslar ve belki de bir direksiyon kolonu ve motoru istiyorsunuz, ancak belki gösterge tablosu veya elektrikli camlar değil.

3
elektrikli camları kim istemez ki?
Spooks

2

Cevabım evet, kesinlikle basit şeyler için Box2D gibi bir fizik motoru kullanın, çünkü bir fizik motorundan hızlı bir şekilde aldığınız bazı özellikleri uygulamak için gereksiz geliştirme zamanını harcamamalısınız. Örneğin, statik bir gövde tanımlayın ve üzerine dinamik bir gövde bırakın ve yönlü giriş için dinamik gövdenize kuvvet uygulayın, birkaç dakika içinde bir platformunuz var. Bir motorun buna değmeyecek kadar ek yük getirdiğini sanmıyorum.


3
yine de, Box2D'nin nasıl uygulanacağını ve kullanılacağını anlamanın basit fizik yaratmaktan daha uzun süreceği söylenebilir. (sanırım bu fizik kullanımının derecesine bağlıdır)
Spooks

1
@Spooks: Box2D'den daha kullanışlı bir şey hayal edemiyorum.

Joe ile burada tamamen aynı fikirdeyim; Box2D kullanımı ile birlikte gelen kullanışlılığın basit bir yedeği yoktur. Box2D ile bazı armatürlerin nasıl oluşturulacağını ve yerçekiminin nasıl tanımlanacağını öğrenmekten birinin ihtiyaçlarını daha hızlı karşılayacak bir şey kodlamayı hayal edemiyorum.
Christopher Horenstein

1

Bir oyunda "fizik" basitse, bir fizik motoru ithal etmeye gerek yoktur.

Fizik terimini gevşek bir şekilde kullanıyorum çünkü fizik modelleme ile phisisk'leri simüle etme arasında bir fark var. Farklılaştırmak için çok önemli bir şey.

Örneğin, Mario Bros.'da koşup durduğunuzda biraz kayarsınız. Bunu nasıl uygulayabileceğinizi düşünün.

Gerekli tüm değişkenleri tanımlayarak modelleyebilirsiniz: örn. kütle, yerçekimi, sürtünme katsayısı, itme vb. yeni hız, ivme vb.

ama buna değer mi? Aynı etkiyi, hareket etmiyorken oyuncuların hızını azaltarak simüle edebilirsiniz ...

Gibi bir şey:

if( pressing movement key ) { 
 speed = 5; 
} else { 
 if(speed) speed--; // slide!
} 

Fark, birinin fizik, diğerinin olmamasıdır. Her ikisinin de artıları ve eksileri vardır. Ancak basit oyunlar için genel bir kural olarak, onu taklit etmek çok daha kolaydır.


1
Bu tür fizik iğrenç. Sahte yapacaksanız, güzel görünmesini de sağlayabilirsiniz. sürtünme = .9 veya 1'in altında bir sayı. speedX * = sürtünme; speedY * = sürtünme;
AttackingHobo

2
Tabii ki, projenin sonunda "eğer (hareket tuşuna basmak ve hareket etmemek ve buz üstünde ve su altında değil ve bu özel bir güçlendirmeye sahipsiniz ve bir çizme ve ...) binmiyorsunuz.

@AttackingHobo: Gönderinin amacı hoş bir kayan algoritma yapmak değil, bir simülasyon ile bir model arasındaki farkı göstermek.
aaronfarr

@Joe: Bunlar sadece sürtünme değişkeninizde yapılan değişikliklerdir .. belki siz ve @AttackingHobo sohbet etmelidir: P Bir fizik motoru ile oyundaki her nesnenin özelliklerini tanımlamanız gerekir. Demek istediğim, basit oyunlar için bir fizik motorunu takmanın otomatik olmaması gerektiğidir. Durumsal.
aaronfarr

1
@aaronfarr: Bir simülasyon ve model arasında fark yoktur; bu amaçlar için eşanlamlıdırlar. Gösterdiğiniz tek şey, bir oyuncak modelin / simülasyonun izole edilmiş bir bölümünün Box2D'nin bütününden daha az kod olduğu.

0

Duruma göre karar vermelisin

Özel motorunuzu kullanan profesyoneller

  • Yazılım kontrol altında (yeni sürüm nedeniyle değişiklik yok)
  • Oyununuz için uygundur (yalnızca oyununuz için ihtiyacınız olan özellikler, ihtiyacınız olan şekilde)
  • Esneklik (istediğiniz herhangi bir çılgın dinamik kodlanabilir, gelecekteki herhangi bir özellik motora dayanmaz)
  • Öğrenme Deneyimi (belki bir gün bir motoru geliştirmeniz gerekir ve nasıl bir motor inşa etmeniz gerekir)
  • Basit özellikler için daha az çalışma ve programlama (bazen bir motorla bir şeyler yapmak, yapısını derinlemesine anlamayı gerektirebilir .. ve layık olmayabilir)
  • Basit özellikler için daha yüksek performans (basit özellikler için oldukça genel amaçlı bir motordan daha yüksek performans elde edebilirsiniz)
  • Daha az bellek (nesne ve kod, yalnızca gerekli özellikler kullanıldığında daha az yer ve bellek alabilir)

Hazır fizik motorunun artıları:

  • Çok fazla çaba harcamadan yeni donanıma ve yeni işletim sistemine uyum sağlayabilir
  • Karmaşık özellikler için daha az çalışma ve programlama çabası
  • Karmaşık özellikler için daha yüksek performans
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.