Oyun programlama: ortak yöntemler ve tasarım modelleri [kapalı]


9

OpenGL 3.x'i daha iyi öğrenebilmem için çok basit bir oyun motoru yazmaya başladım, ancak deneyimim ve 3D oyunun nasıl tasarlanması gerektiğine dair seyrek bilgimden dolayı, genellikle sınıflarımı tasarlamam gerektiğini fark ettiğim yerlerde problemlerle karşılaşıyorum farklı. Karşılaştığım diğer sorunlar, oyunda zamanın kısa bir şekilde nasıl takip edileceği ve gerektiğinde hareketin nasıl güncelleneceği ve oluşturucunun yeniden çizilmesi gerektiğini nasıl anlatacağı. Ayrıca bir nesneden diğerine çeşitli bayraklar geçirmek için Get ve Set işlevlerini yapmaya devam etmeye ihtiyacım var, bu kötü bir uygulama mı?

Yani, başlığın dediği gibi, bana yardımcı olabilecek ve oyun tasarımında bazı ortak tasarım kalıplarını (yani oyun durumu işleyicileri, yazı tipleri vb.) Açıklayacak herhangi bir kitap veya makale / öğretici ve kaynakla ilgileniyorum.

Btw, hala freeglut kullanıyorum, ilerlemeden önce veya daha iyi bir OpenGL kavraması aldıktan sonra daha iyi bir pencereleme sistemine geçmenizi önerir misiniz?


12
Standart "Ben bir motor yazıyorum" yanıtı = Motorları değil, Oyunları Yazın. Motorlar düşecek derin bir tavşan deliğidir. Şimdiye kadar hangi araştırmayı yaptınız? Burada tek, odaklanmış bir konu seçerek ve geçmiş soruları arayarak en iyi sonuçları elde edersiniz. Oyununuzu yazarken ortaya çıkan yeni sorunları birer birer aramaya devam edin. Bir yan not olarak, sınıfların yeniden tasarıma ihtiyaç duyulduğunu fark etmek yaygındır ve bunu yapma sürecine "yeniden düzenleme" denir, bu da ilerledikçe öğrendiğiniz anlamına gelir ve bu iyi bir şeydir.
Patrick Hughes

1
Yanıtınız için teşekkürler. Anlaşılmadıysa, tam teşekküllü bir oyun motoru oluşturmak istemiyorum, ancak sınıflarımı daha iyi tasarlayabilmem için oyun tasarımında kullanılan bazı temel tasarım modellerini öğrenmek istiyorum. Sanırım yaygın sorunlara bazı ortak çözümler olmalı. Tasarıma ne kadar derine girersem, o kadar çok sorun ortaya çıkar ve cevap bulmak daha zordur. Şimdiye kadar yaptığım araştırma çok verimli olmadı, bir oyunun yapımına daha da derinleşen güzel bir öğretici codeproject.com/Articles/27219/… .
Grieverheart

1
Görüyorum ki, "oyun motoru ortak yöntemleri" başlığını tartışmaya yöneltir ... motorlar =) Her durumda, aradığınızı elde etmekte zorlanmanızın nedeni, Maya takvimlerinde yıllar olduğu için her oyunun kendi ihtiyaçları vardır. Belirli bir oyun türü arıyorsanız, birinci şahıs nişancı çok yaygındır, arama motorlarına biraz çekiş kazandırmak için daha iyi sonuçlara sahip olabilirsiniz.
Patrick Hughes

Aradığım şey FPS tarzı veya serbest dolaşım olabilir. Özünde, çeşitli grafik ve animasyon tekniklerini deneyebileceğim bir dünya yaratmak istiyorum. Zaten temel bir kameram ve zıplama ve strafing ve model yükleme gibi bir hareketim var ama doğru hissetmiyorum, örneğin yürüyen animasyonu kamera sınıfının içine koydum ve çerçeveleri saymak için dahili bir değişken kullanıyorum. Çoğunlukla delikleri düzeltiyorum ve sağlam bir şey üretmiyorum. Sanırım bu öğrenme sürecinin bir parçası ve belki de çok hızlı hareket etmeye çalışıyorum.
Grieverheart

3
oyun kodlama tamamlandı, oyun motoru mimarisi kodlama oyunları hakkında iki kitap, geliştirme boru hattı ve temel teknoloji hakkında genel bir bakış elde edersiniz, her şeye biraz
dokunurlar

Yanıtlar:


11

Yaklaşık 2 ay önce sahnede olduğumdan beri uygun bir cevap yazacağım.

OpenGL 3.x'i daha iyi öğrenebilmem için çok basit bir oyun motoru yazmaya başladım, ancak deneyimim ve 3D oyunun nasıl tasarlanması gerektiğine dair seyrek bilgimden dolayı, genellikle sınıflarımı tasarlamam gerektiğini fark ettiğim yerlerde problemlerle karşılaşıyorum farklı.

Endişelenme. Deneyim eksikliğinizle, belirli bir sınıfın motorunuzda kullanılacağı tüm olasılıkları ve yolları asla düşünemezsiniz. Sınıfın ana özelliklerini göz önünde bulundurmanız, uygulamanız ve daha sonra yeniden yapılandırmanız en iyisidir. Bir şeyleri düşünmeye çalışma, bu aşamada zamanını boşa harcıyorsun. İlk oyunum tamamen dağınıktı, eminim çoğu insan için durum böyleydi.

Karşılaştığım diğer sorunlar, oyunda zamanın kısa bir şekilde nasıl takip edileceği ve gerektiğinde hareketin nasıl güncelleneceği ve oluşturucunun yeniden çizilmesi gerektiğini nasıl anlatacağı.

İhtiyacınız olan şey, bir oyun döngüsünün ne olduğu hakkında bilgi. Bu , başlamak için iyi bir yerdir. Fizik işleme gibi daha karmaşık bir kod yazmaya başladıktan sonra, değişken kare sürelerine sahip döngüler düşünmek isteyebilirsiniz, ancak küçük başlayın. Basit bir sabit çerçeve oyunu döngüsü şimdilik yeterli.

Ayrıca bir nesneden diğerine çeşitli bayraklar geçirmek için Get ve Set işlevlerini yapmaya devam etmem gerekiyor, bu kötü bir uygulama mı?

Bu daha çok bir yazılım mühendisliği sorusudur. Zamanla hangi verileri korumanız gerektiğini ve hangilerinin güvenli olduğunu göreceksiniz. Sadece bir özelliği uygular ve daha sonra dışarıda nelerin ortaya çıkmadığını görürseniz ve herkese açık veri olarak değerlendirilebilirseniz en iyisi budur.

Her şey bir deneyim meselesi. Bir kamera sınıfı yazacaksınız, daha sonra dönüştürme matrislerinin yanında istediğiniz işlevselliği göreceksiniz. Herhangi bir acil ipucu istiyorsanız, söylemeliyim, çıplak kemikleri uygulayın, daha sonra uzatın.

Makaleler ve Kitaplar:

  • Oyun motoru geliştirme

Bu kitaplar modern oyun motorlarının ve boru hatlarının mimarisinden bahsediyor. Altta yatan teknoloji hakkında size iyi bir genel bakış sunacaklar. Seçmeniz gerekiyorsa ilk kitabı öneririm, bazı teknolojilere karşı daha az "önyargılı", ancak sonunda her ikisi de büyük bilgi kaynakları olduğu için her ikisinden de geçmek istersiniz.

http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135

http://www.amazon.com/Game-Coding-Complete-Third-Edition/dp/1584506806

  • OpenGL

http://ogldev.atspace.co.uk/index.html

http://www.arcsynthesis.org/gltut/index.html

http://www.opengl.org/sdk/docs/man3/

  • GLSL

http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/glsl-core-tutorial-index/

http://www.opengl.org/sdk/docs/manglsl/

  • Çarpışma algılama

http://www.peroxide.dk/papers/collision/collision.pdf

(Bunu bağlıyorum çünkü uygun 3D çarpışma tespitinin nasıl yapıldığına dair makaleler bulmak zor buldum.)

Daha fazla kitap var, ancak bunu bitirdiğinizde (özellikle Game Engine Mimarisi), ne istediğinizi daha iyi bileceksiniz.

Btw, hala freeglut kullanıyorum, ilerlemeden önce veya daha iyi bir OpenGL kavraması aldıktan sonra daha iyi bir pencereleme sistemine geçmenizi önerir misiniz?

WinAPI, Windows programlamayı öğrenmek için zamanınız ve isteğiniz olduğunu düşünüyorsanız (Windows için geliştiriyorsanız). FreeGLUT öğrenme için iyidir, ancak sonunda daha fazla işlevsellik isteyeceksiniz. Yine de, tamamen başka bir rotaya gitmek istiyorsanız, SFG veya SDL gibi kütüphanelerle OpenGL'yi başlatabilirsiniz. Benim gibi inatçı değilsen FreeGLUT ile devam et. WinAPI için düz gittim.


Hey dreta, çok güzel cevabın için çok teşekkürler, bekliyordum: P! Neyse ki, zaten fizik simülasyonları için bazı algoritmalar uyguladığımdan beri çarpışma algılamayı nasıl yapacağımı biliyorum :).
Grieverheart

@ user1294203 harika, ben başlarken kayboldum, bu yüzden sadece durumda yayınladı
dreta

Platforma özel kodla çok fazla uğraşmak istemiyorsanız, SFML için oy kullanıyorum. Küçük, kolay, temiz ve örneğin WINAPI'yi nasıl sardığını anlamak için koda kolayca girebilirsiniz.
edin-m
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.