Bir oyun nasıl yapılır? [kapalı]


20

Benim sorunum, bir oyunun klonunu (pratik için) veya kendi oyunumu veya başka bir problemi programlamaya başladığımda, gelişimin ortasında bir yerde duruyorum çünkü ilgimi kaybettim.

Bir oyun geliştirmeye veya genel olarak gelişmeye nasıl ilgi duyuyorsunuz?


4
Gerçekten konu dışı - motivasyon önerileri için verimlilik.stackexchange.com adresini deneyin .
Cyclops


İnsanları ilgilendirin ve işinizin çevresinde bir topluluk toplayın. İnsanların sizinle küçük bir projede çalışmasını sağlayabilir ve böylece birbirlerini motive edebilirsiniz. Ayrıca, işi mümkün olduğunca küçük parçalara ayırmaya çalışın, bu şekilde çok fazla zaman harcamadan çok daha hızlı ilerlediğinizi hissedeceksiniz.
Thomas

Yanıtlar:


28

Bir tasarımcı olarak insanları istatistik ve değişken koleksiyonları olarak düşünme eğilimindeyim. Sorunuzu yönelttiğinizde, [Pong_Dev_Interest] azalan ve [Spa_Inv_Dev_Interest] artışlarını kolayca resmedebilirim. İkisi arasındaki fark [Dev_Project_Inertia] 'dan (biraz [Dev_Completion_Desire]) daha büyük olduğunda, [Pong_Dev] üzerindeki aktivite durur ve [Spa_Inv_Dev] başlar.

İngilizce: Projeyi tamamlayamazsınız, çünkü bitmiş bir ürünü görmek için ham arzunuz mevcut projeye olan ilginiz tarafından geçersiz kılınır. Eğer varsa gerçekten birini bitirmek istiyorum, tek çözüm (Ben senin pong klonu ile gitmek istiyorum) ve bir seçmektir bitirmek . Kendinize "Ben, belki de bu klonu biraz daha rafine edebilirim ama tanrım, bir projeyi kapıdan atmak iyi hissettirdiğini biliyorum" deyin. Sonra çalışmaya devam et.

Sıkıldığınızda çalışmaya devam edin. Harika gittiğinde çalışmaya devam et. Saçmalamaya başladığında, çalışmaya devam et! Sebat! Olabilecek Küçük Geliştirici Olun! Sana inanıyorum!

Ahem. Orada biraz fazla coşkulu. Ama sapmayı elde edersiniz.

Her gün kendi tavsiyemi takip ediyorum. Ortamımı ve aktörlerimi çalıştırdım, kazanma ve kaybetme koşulumu inşa ettim ve Player'ın kullanacağı nesneleri yarattım. Temel olarak bir seviye tasarım yapmaya başlamaya hazırım ve ilgim arttı. Ama her gün biraz yaparım. Her gün. Bir gün bitireceğim.

Ve bu çok goooooood hissedecek.


12

Her zaman kendime aynı soruyu soruyorum ve kendinizi motive etmek için yapabileceğiniz birkaç şey var (birçoğu zaten burada yayınlanmıştır). Benim için iyi olan şey, bu yılki GDC'deki Bağımsız Görüşmelerden birinde duyduğum bir şey, sanırım Monako oyununu yapan kişi oldu :-)

İlk olarak, deneyiminize uygun bir proje bulun. OpenGL / DirectX'in temellerini bile bilmiyorsanız FPS yapmaya başlamıyorum. (bir oyun motoru kullanmıyorsanız ancak buradaki nokta bu değildir ;-))

Ardından, kendinize yapmak istediğiniz şeylerin ve ulaşmak istediğiniz dönüm noktalarının bir listesini yapın, böylece her zaman nereye gideceğinizi bilirsiniz. YAPILACAKLAR önemli kısımdır. Görevlerinizi tanımlayın, böylece her görev bir günde veya birkaç saat içinde kolayca yapılabilir . Kodlamaya, tasarlamaya, modellemeye vb. Başladığınızda, tünelin sonunda ışığı zaten görüyorsunuz. Hiçbir şey, bitiş çizgisine yaklaşmadan büyük Game Engine'inizi bir ay boyunca tasarlamak ve kodlamaktan daha iç karartıcı olamaz. Büyük görevleri daha küçük görevlere ayırın. Bir işi hızlı bir şekilde bitirmek gerçekten ödüllendirici ve devam ediyor. Örneğin, bu bir seferde küçük bir uzay shooter oyunu için görev listemdi:

  • Ses efektleri
  • Müzik
  • Model Gemi
  • Yeni model roketler
  • Atışlar ile oyuncu / düşman arasında Koalisyon Tespiti
  • Düşmanları vur
  • Başlık ekranı
  • Skor / Hayat / Enerji Ne olursa olsun

Tüm bu görevleri yapmak kolaydı ve oyunda çalıştıktan sonra, bu alanları tekrarlayabilir ve parlatabilirsiniz.

Ve hey, küçük bir oyunu bitirdim. Güzel değil ama temelde sonunda gerçekten ödüllendirici yapıldı :-)


3

Sorunu çözmeden önce tanımlamanız gerekir. Neden ilginizi kaybediyorsunuz?

Benim için, genellikle çerçeve üzerinde çok fazla zaman harcadığım için olur ve haftalar sonra tek bir oyun öğesi bile alamadım.

Motivasyonumu geliştirmek için bulduğum bir yol, yinelemeli prototip oluşturma veya bir çeşit Test Odaklı Geliştirme yapmaktır. Genellikle test senaryolarının otomatikleştirilmesini içerir, ancak oyunlar grafik yoğun olduğundan ekranları ve animasyonları test olarak otomatikleştiremezsiniz, ancak oyun mantığınız otomatik olabilir.

Otomatikleştirilemeyen parçalar için, temel olarak oyun için birkaç kilometre taşı planlayacağım. Kilometre taşı 1 muhtemelen ekranda bir hareketli grafik oluşturur ve örneğin WASD'ın çalışmasını sağlar. Yavaş yavaş, daha fazla özellik ve refactor ekleyeceğim.

Bu bir tür bölünme ve fethetme biçimidir. Küçük parçalara ayrılın, rahat olduğunuz biriyle çalışın, sonra entegre edin. Durulayın ve tekrarlayın. Sonunda, malzemeleri yeniden düzenlemenin daha iyi bir yolunu görebilir ve kodunuzu yeniden düzenleyebilirsiniz. Önünde bir mimariye sahip olmamak dağınık, ancak genellikle programlamaya başlarken, birkaç yıllık deneyiminiz olana kadar mimariyi görselleştirmek zor.


1
Bunu uzun zamandır yapıyorum ve oyununuzun ilk hareketli grafiğini yüklemek ve ekranda hareket ettirmekten daha heyecan verici bir şey yok.
Tükendi Aktivist

2

Daha kolay bir parça bulmaya çalışıyorum. Sanki bir şeylerin nasıl yapılacağını anlayamıyorsam ya da istemiyorsam, vites değiştiririm ve model veya bir gölgelendirici yazarım vb.

Bkz bu ve bu diğer yazı.


1
+1 Evet, bu çok iyi bir taktik. Zihninizi bir süre zor şeylerden çıkarın, gidip biraz homurdanma işi yapın ve geri döndüğünüzde artık zor görünmüyor. Benim için çalışıyor.
Mühendis

2

Bir oyunu doğru şekilde nasıl yapılandıracağınızı bilmiyorsanız, öğelerini oyundan bağımsız bloklara nasıl soyutlayacağınızı öğrenmeye başlamalısınız. Bu, birçok açıdan (ilginç olmanın yanı sıra) size yardımcı olabilir: soyutlamaları uygulamalardan ayırma deneyimi, kalıtım ve arayüz tasarımından daha iyi yararlanma veya sadece profesyonel görünmesi (veya sağlaması için) dinamik bağlantı kitaplıkları veya diğer arayüz kullanımları ile uygulamaların esnekliği). Er ya da geç her şeyin yapılabileceğinin farkına varacaksınız ve daha sonra kendinizi bu motivasyon problemi olmadan bulacaksınız (sadece siz yapıyorsunuz).

İlk başta takıldığımda aynı problemi yaşadım, ancak en iyi çözüm hareket etmeye devam etmektir, ya da bir şey sizi bir şekilde sıfırlayana kadar sonsuza kadar durabilirsiniz (ve çok uzun sürebilir). Birkaç gün sadece 2 satır kodlamanızın bir önemi yoktur, ancak her gün en azından projeyi açıp bir şeyleri geliştirmeye çalışmanız gerekir (bu hiç bitmeyen bir görevdir, ancak sorun bu değildir).

Bir noktada program çalışmazsa, en son yaptığınız işlemi geri almalısınız (yedeklemeyi bir svn veya en azından tarih adıyla bir .rar kullanın) çalıştığı bir noktaya getirin ve yapmaya çalışın. tekrar deneyin veya tekrar denemek istediğinize kadar diğer değişiklikler üzerinde çalışın.

İlk başta hata ayıklayıcı yardımı ile düzeltmeye çalışmalısınız, ancak dilinizin bir hata ayıklayıcıyı destekleyip desteklemediğini bilmiyorum ... ancak şans eseri C ++ veya bunun gibi bir şey kullanıyorsanız ( oyun yapmak istiyorsanız), hata ayıklayıcınızı daha iyi kullanmalısınız, çünkü tek bir seferde hatayı hızlı bir şekilde bulmanıza çok yardımcı olacaktır.

Oyun programlama hakkında okumak, özellikle herhangi bir şey üzerinde çalışmak istemiyorsanız, konuyu korumak için iyi bir şeydir. Online olarak bulabileceğiniz oyun motorları ve tasarım hakkında bazı iyi kitaplar ve makaleler var.

Eğer pratik yapmazsan hiçbir şey yapamazsın. Bir hata bulmaya çalışmak ilk başta çok sinir bozucu olabilir, ancak daha sonra bunu nasıl yapacağınızı biliyorsanız aslında kolay olduğunu öğrenirsiniz. Bu, değişikliklerin tüm programda etkilemediği bir şekilde kodlayarak, hatayı nerede arayacağınız yerlerin miktarını azaltarak zamanla nasıl kaçınacağınızı öğrendiğiniz bir şeydir. Eğer zorlaşırsa pes ederseniz, bir dahaki sefere oyun yapmayı düşündüğünüzde başlamadan önce pes edeceksiniz. Sadece kötü anı yenerek nasıl üstesinden geleceğinizi öğrenin: P Motivasyonunuzu kaybettiğiniz o andan geçmezseniz, tembellik kazanırsınız ve kaybedersiniz, bu nasıl çalışır, motivasyonu nasıl kazanacağınızı öğrenene kadar fazla çaba harcamadan.

PS: Merak ediyordum ... oyunu yapmak için ne kullanıyorsun?


+1 Kaynak kontrolünü kullanmak için. SC'ye sahip olmamam, 4 yıl önce oyunumda çalışmayı bırakmamın temel nedeniydi (kaynağı geri dönmek için çok fazla değiştirdim). Neyse ki, son zamanlarda XNA'nın faydalarını fark ettim ve oyun tekrar çalışmalara döndü.
Richard Marskell - Drackir

2

[anon'un cevabına yorum olarak bırakılmak istedim. Tüm bu işlevlerin çalıştığını, daha sonra tek bir dosya kodunu birden çok dosyaya böldüğünden bahsetti, sadece her şeyin parçalanması için]

Re: yeniden düzenleme, profesyoneller için bile bir şeyler olabilir. Bazen Git gibi iyi araçlarla bile, A özelliği ve B özelliği yerine birleştirme başarısız olabilir, ikisi de işe yaramaz! Tek seçenek A'ya geri dönüp tekrar denemektir. Neyse ki sürüm kontrolü bu kodu sizin için kaydeder; Gerçek sürüm kontrolünü kullanmıyorsanız, en azından dev klasörünüzü düzenli olarak sıkıştırarak manuel olarak yapın - HD alanı ucuzdur! Sonuç olarak, oyunun her adımda hala çalıştığından emin olarak daha küçük adımlarla neyin işe yaradığına ve yeniden düzenleyiciye geri dönün. Sadece her şeyin parçalandığını görmek için kodu temizlemek gerçekten iç karartıcı. Sadece eski koda dön.


1
"Gerçek sürüm kontrolü kullanmazsanız, başlangıç " - doğru cevaptır. :) Gerçekten - öğrenmesi kolay ve büyük bir kuvvet çarpanı. Herhangi bir VC, öğrenmekten çok daha fazla zaman kazandıracaktır.
Cyclops

Mezun olduğum üniversitedeki son disiplinler arası tasarım projesinde, EE'ler başka bir şey yapmadan önce SVN kururken CS ekibinin kaynak kontrolüne hiçbir ilgisi olmadığını görmek beni şaşırttı. Tuhaf!
3Dave

1

Motive olmak için, kendinize bir oyun motoru değil, bir oyun yaptığınızı söyleyin. Ve bu harika, oyun motorları harika, ancak sıklıkla oyun yapma yoluna giriyorlar.

Ne demek istediğimi göstermek için, işlerin sık sık nasıl gittiğini söyleyebilirim: ilk önce birkaç sprite yaratırsınız, onları proto çerçevenizle ekranda hareket ettirirsiniz ve heyecanlanırsınız! İlerlemenizi görebilirsiniz ve iyi gidiyor; arkadaşlarına gösterebilirsin.

Daha sonra, konseptinizle biraz oynadığınızda, çerçevenizi (veya oyun motorunuzu) daha esnek hale getirmeniz gerektiğini fark edersiniz. Ya da en son kalıpları takip etmeyen bazı sınıfları yeniden hesaba katmalısınız. Ve oradan, bir ölüm sarmalına başlıyorsunuz: bir oyun üzerinde çalışmayı bırakıyorsunuz ve bir oyun motoru üzerinde çalışmaya başlıyorsunuz. Ve oyun motorları yapmak neredeyse eğlenceli değil. Saatleri yeniden düzenleyerek geçirebilir ve oyunda gösterecek hiçbir şeyiniz olmaz. Ve sonra, ilginizi kaybedersiniz.

Unutmayın: oyun motorları değil, oyun yapın. Sadece gerektiğinde refactor. Çok esnek olmayın - sadece minimum minimum. *

*: elbette yeniden düzenleme ve esneklik önemlidir. Ama aslında bitmiş bir oyun olması kadar önemli değil.


1

Ne kadar basit olursa olsun, bir günde oynanabilir bir versiyon yapmaya çalışın. Sonra tekrarlayın.


1
  1. Oyununuzu çok karmaşık hale getirmeye çalışmayın!

  2. Görevinizi küçük, spesifik, ölçülebilir alt görevlere bölün. Herhangi bir alt görev çok büyük görünüyorsa, daha sonra alt bölümlere ayırın.

  3. Göreviniz tamamlandığında, görev listenizde (.txt dosyası kullanıyorum) büyük harflerle "YAPILDI" yazdığınızdan emin olun. Görevi kaldırmayın, çünkü o zaman ilerleme kaydettiğiniz gibi görünmez.

Bu benim işim. Geçmişte işe yaradı.

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.