Örnek alınacak en iyi tasarlanmış açık kaynaklı oyun motoru nedir? [kapalı]


15

Olası Kopya:
Oyun kodunun iyi (iyi organize edilmiş) örneklerini nerede bulabilirim?

Birkaç C ++ oyununu kodladım ve şimdi kendi oyun motorumu ve editörümü kuruyorum.

Tasarım konusunda bazı şüphelerim var ve takip edecek harika örnekler bulmak istiyorum.

Sizce en iyi tasarlanan nedir?

Nesne yönelimli olmalıdır. Programlama dili önemli değil, ama bu sırayla tercih ederim: C ++, C #, Java veya başka bir benzer.

DÜZENLENMİŞ: Daha fazla açıklığa kavuşturmak için oyuna özel kodla ilgilenmiyorum. Genel amaçlı oyun motorları istiyorum.

DÜZENLENEN: Bu makalede oyun motoru nedir: wikipedia'da oyun motoru ve burada bilinen oyun motorlarının bir listesi: wikipedia'da oyun motorlarının listesi


3
Sorumu gerçekten anlıyor musun? Oyun motorları diliyorum (sadece oyunlar değil ). Ve ben nesne yönelimli olmalı istedi . Söylediğiniz iş parçacığında, yanıtlar yalnızca oyunlar içindir (Doom3, Prototype, vb.) Ve ayrıca bir grafik araç takımı (OpenSceneGraph) var ama bu iş parçacığında "oyun motorları" ile ilgili özel bir şey yok ... yoksa böyle yapmazsanız sorumu silmek, ancak ben aşağı oyu anlayamıyorum ... :( sorum değil aynı
Dani

2
Daha da fazla açıklığa kavuşturmak için oyuna özel kodla ilgilenmiyorum. Genel amaçlı oyun motorları istiyorum.
Dani

3
Bir fark var: Tüm oyunlar genel amaçlı bir motorda çalıştırılmaz. Doom3'ün FPS'e özgü bir motoru var, Prototip farklı, vb. Benim sorum "Birkaç C ++ oyun kodladım" ifadesi ile başlar. Tekrar ediyorum: İhtiyacım iyi bir genel amaçlı oyun motoru kaynak kodu bulmak. Yeniden kullanılabilir kod aramak için bir oyun kaynağı değil.
Dani

1
Doom 3, "FPS'ye özgü bir motora" sahiptir, ancak genel bir motorun ihtiyaç duyduğu tüm parçalara sahiptir - dediğiniz gibi, kaynak yönetimi ve komut dosyası oluşturma, 3B oluşturma, fizik vb. Bu genel bir motor ve daha fazlası , bir şekilde daha az değil.

2
@Joe Wreschnig @ Dani ile bu konuda hemfikirim. Tüm oyunlar bir tür motorla güçlendirilse de, "bir kerelik" bir motor ve birden fazla başlık üzerinde çalışmak üzere tasarlanmış bir motor için kullanılan mimari desenler, her ikisi de komut dosyası, kaynak yönetimi, 3D render, vb bileşenleri. Buna ek olarak, aynı stüdyo tarafından geliştirilen bir motor üzerine inşa edilmiş bir oyunun koduna bakmak, muhtemelen en akıllıca seçim değildir, çünkü motorun 3. taraf bir ortamda ne kadar esnek ve kolay kullanıldığına dair gerçek bir gösterge vermeyecektir.
Ari Patrick

Yanıtlar:


6

Bir oyun motoru inşa etmenin en iyi yolunun, zaten iyi bildiğiniz şeylerle başlamak ve sıkıcı veya tekrarlayan bu özellikleri eklemek olduğunu düşünüyorum.

Örneğin, Python / pygame (SDL sarıcı olan) ile çok şey yapıyorum Sistemden biraz keyif alıyorum, ancak beni rahatsız eden üç şey vardı:

  • Animasyon döngüsünü oluşturmak sıkıcı ve hepsi aynı.
  • Temel hareketli grafik nesnesi çok sınırlıdır. Yön ve hız, çeşitli ekran kenarı koşullarını işleme yeteneği, çoklu görüntüler ve çoklu çarpışma şemaları ile gelişmiş bir hareketli grafik istedim.
  • Pygame'de UI özelliği yok. Basit etiketler, düğmeler ve
    oyunlarıma kolayca ekleyebileceğim bir numara seçici istedim .

Bu özelliklerin etrafında nesne yönelimli bir sargı oluşturmak nispeten kolaydı. 10. bölüme ve burada bulunan Game Engine belgelerine bakın: http://aharrisbooks.net/pythonGame/

(Bu bir kitabın parçası olarak yazılmıştır, ancak kitabı istemeseniz bile oyun motoruna hoş geldiniz.)

Bölüm 10, temel bir 2D oyun motoru oluşturma motivasyonunu ve tekniklerini açıklamaktadır. Kendinizinkini yaparken zevk alabilirsiniz. Asıl dil o kadar önemli değil (tabii ki OOP'yi desteklemek için bir OOP diline ihtiyacınız olacak.) Zaten C ++ ile SDL kullanıyorsanız, motorumu C ++ / SDL'ye uyarlayarak başlayabilirsiniz.


8

Saygıdeğer Quake (ID tech) motor tasarımı, zaman testine dayanmıştır ve muhtemelen tüm zamanların en başarılı oyun motoru tasarımıdır. Oluşturucunun yanı sıra 90'ların ortalarından bu yana büyük ölçüde değişmedi ve hala ETQW gibi modern oyunlarda kullanılıyor.

Bu motorun dört yinelemesi için tam kaynak kodu (Quake 1 ila 3, artı Wolf ET) GPL altında mevcuttur. Muhtemelen, modern çağda onları alakalı tutan, aktif olarak geliştirilmiş topluluk destekli Quake tabanlı oyun motorları vardır. Özellikle göz alıcı renderörü için XreaL ve modern donanım için optimize edilmiş Quake 3'ün sadık bakımı için ioQuake3 görülmeye değer. Ayrıca, motorun daha yeni "resmi" kimlik sürümleri için oyun mantığı (tüm motor değil) da mevcuttur.

Bu oyun motorunu kullanmasanız bile, iyi düşünülmüş istemci-sunucu ayırma mimarisi ve oyun mantığının düşük seviyeli detaylardan ayrılması için çalışmaya değer.


1
Gerçi tam Doom3 id teknoloji nesnesi odaklı çağırmaz.
Tetrad

3
Hayır, nesne yönelimli değil, ama dediğim gibi, çalışmaya değer. Demek istiyorum ki, sadece prosedürel olması, ona bakarsanız göz kanseri vereceği anlamına gelmez! ;)
Max

6

Ogre3D görüntüleme kütüphanesi motor koduna oldukça yakın ve duyduğum tüm hesaplardan çok iyi tasarlanmış ve çok OO.

http://www.ogre3d.org/


+1 Harika bir motor. Teşekkürler Tetrad! Zaten biliyorum, ama kaynak kodunu hiç kullanmadım ve görmedim. AI'yı entegre edip etmediğini biliyor musunuz (örn. Yol bulma vb.)
Dani

3
Bence her şey sadece renderle ilgili.
Tetrad

2
Ogre yalnızca bir grafik oluşturma kütüphanesidir. Nesneye Dayalı Grafik Oluşturma Motoru.
Jonathan Sternberg

0

Oyun motoru hakkında konuşurken sanırım render motoru, ses motoru, fizik motoru, giriş motoru vb. Olmayan bir şey düşünüyorsunuz.

Yani bir tür sahne / çözücü / yanılsama oluşturmak için verileri ve diğer bileşenleri yönetmek üzere bir yazılımı yapılandırmak için kullanılan oyun mimarisi, AI veya tasarım deseni / sistemleri vb. gerçek bir "video oyunu" oluşturmak için çimdik.

Bu, bir video oyununun gerçek üst katmanıdır ve hatta bu konuda biraz öğrenmeye çalıştım, geniş, karmaşık ve diğer tüm konularda çok fazla bilgi gerektiriyor. Hiçbir şeyden alternatif bir gerçeklik yaratmak, her olayı keetlemek ve hesaplamak ve bunlardan her an doğru verileri yeniden oluşturmak istediğinizi düşünün: Her tür oyun için bir tür alt-grup oyun motoru var ve ben Matematiksel olarak yeterince hızlı olan genel bir motor yapmak gerçekten mümkün değil. Tek bir karakteri kontrol ettiğiniz bir oyun için bile, değişebilen ve oyunun tüm mimariyi değiştirmesini gerektirebilecek birçok şey var.

Oyun endüstrisi, açık kaynak tarafından diğer bilgisayar bilimleri alanları kadar iyi sunulmamaktadır, çünkü eğlencenin sanatsal lisansları içeren farklı türde lisans türleri olması nedeniyle: oyun ürünü sadece bir müşteri ve AFAIK tarafından ödenir, sadece işinize yarayacak kadar iyi görünen birkaç motor: Hord3d, NeoAxis, blendelf, Panda3D. Ancak Unity, Torque, C4 ve diğerleri gibi araçların kullanımı kadar kolay olacağını garanti edemem; bir oyun motorunun grafik oluşturucu ile oyun yapımında bulacağınız en zor yazılım türü olduğunu unutmayın.


0

Benim için Pygame ile Python kullanmak iyi bir çözüm. Belki Python biraz yavaş ama bugünün bilgisayarları için ve sadece oyununuzu optimize etmeye çalışırsanız bu önemli değil. Pygame'nin orijinal pygame sitesinde çok iyi bir belgesi var. Ama önce bazı temel bilgileri öğrenmek için bir öğreticinin başlangıcını alın. Hız optimizasyonu (görüntüleri dönüştürmek, ...) için kolayca bulunabilecek diğer örneklere ihtiyacınız olacaktır.

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.