AMATÖRDEN TAVSİYE
// Yıllarca Öğrenim Boyunca Sıfırdan Amatörye
Kesinlikle Unity veya Torque2D MIT gibi üst düzey motorlardan uzak dururdum. Küçük prototipler için harikalar, ancak kendi video oyunumu geliştirmek için onları asla ciddiye almam. Neden yapayım? Basit bir SideScroller veya Arcade versiyonundan başka bir şey olmadıkça anlamı nedir?
Çoğu oyun motoru, kitaplık veya çerçeve, asla kullanmayacağınız işlevler ve özelliklerle dolu çok sayıda şişirilmiş kod ile en basit görevlerden başka bir şey yapmaz.
Yıllar önce oyun geliştirmede yeniyken zirveye başladım. Çok yüksek seviyeli motorlar. RPG MAKER gibi çok yüksek bir şey değil, ama kesinlikle Unity ve Torque gibi yüksek. Sonra XNA ve C # 'a indim, çünkü çok fazla kaynak ve öğretici vardı. Birincil projemin performansa ihtiyacı vardı, ya da belki de büyük bir proje olmasa bile yazılımımda inanılmaz bir performans istemeye takıntılı bir kompulsifim var. XNA basitçe kesmedi ve okuduğum motorla ilgili birçok sorunum vardı, düzeltmek için bir baş ağrısı gerekiyordu. Kendi motorunuzu C ++ 'da yuvarlayacağınızla aynı işi yaparken (XNA hatalarını ve sorunlarını giderirken) XNA / C # gibi "daha yüksek seviye" bir şey kullanmanın anlamı nedir?
Bir süre öğrendikten sonra, sonunda oyun motorlarının nasıl tasarlandığını öğrendim ve motorların kodlarını aramaya başladım. Çoğu profesyonellerin söylediklerini ve oyun motorlarının eleştirmenlerinin şikayetlerini okumak, 'Neden bir motor kullanıyorsunuz?'
C ++'ımı fırçalamak ve gerçekten o dilde kullanılan bazı felsefelere girmek bana çok yardımcı oldu. Ancak, bir oyun yapmaya başlamak istediğim kadar çok şey öğrenmek için çok zaman harcadım.
Bu yüzden oldukça övgü dolu bir şeyle sonuçlandım, C ++ ve çok düşük bir seviyeydi: SDL. Ne yazık ki, bu bir baş ağrısıydı. Çok düşük bir seviyedir, bu kütüphaneyi kullanmak için neden hiçbir sebep göremiyorum. Basitçe OpenGL öğrenmeyi ve sıfırdan kendim yapmayı tercih ederim. Dürüst olmak gerekirse, çoğunlukla bir görüntüyü çevirmek gibi temel bir şey yapmak için kendi kodumu uygulamak zorunda kaldım (ve spriteları nasıl ele aldığım nedeniyle başkalarının uygulaması çalışmadı), beni kalıcı olarak SDL'yi çöpe attı. Bir yazılım oluşturucu istiyorsanız harika, ancak IMO, donanım (OpenGL) veya daha yüksek (SFML) ile daha aşağı inmesini tercih ederim.
Amazon'da başka bir kitap satın almak ve başka bir API öğrenmek istemediğim için daha yükseğe çıktım. SFML sadece harika, tüm internette övgü bahsetmiyorum bile. Hiçbir olumsuz yanında neredeyse sonsuz sayıda olumlu eleştiriler okudum. SDL için aynısını söyleyemem. Tüm aşırı temelleri ele alır, ancak gerisini bana ve seçtiğim diğer kütüphanelere bırakır. O zamandan beri ona takılı kaldım.
IMO, bir oyun motoru sadece aptalca. Düşük seviyeli kütüphaneler hem uzman hem de yeni başlayan programcılar için çok daha iyi seçimlerdir.
Ayrıca, kavramları programlama hakkında daha fazla bilgi edindim ve yüksek seviye WYSIWYG oyun motorlarıyla öğrendiğimden daha düşük bir seviyede şeyleri işlemek zorunda kaldığımda yazılım geliştirme becerilerimi keskinleştirdim.
Unity gibi bir şey size XNA üzerinden ne verir? Görsel düzenleme ve koltuk değneği. Yeni başlayanlar nihayetinde, tıpkı çıplak C ++ 'a sahip olduğunuz gibi, neredeyse tüm oyunu kodlamanız gerekeceğini öğrenecek ve görsel editörler kendiniz oluşturabileceğiniz bir şey için verimsiz olacaktır.
XNA gibi bir şey size SFML üzerinden veya kendi OpenGL ve diğer faydalı kütüphanelerin uygulanmasında neler verir? IMO, absolutley iyi bir şey değil. Daha kötü performans, C ++ yerine C #, acemi öğreticilerin bolluğu ancak önemli ölçüde daha az profesyonellik ve IMO'nun sadece C ++ ile öğrenmeniz gereken şey için bir koltuk değneği olduğu bazı baş ağrısı koruyucular. Başlangıçta C ++ ile korkutuldum ve C #'ı sevdim, çoğunlukla duyduğum ve başlangıçta C ++ ile yaşadığım sorunları olan aptalların görüşlerine dair söylentiler nedeniyle: Sadece yeterince iyi bir programcı istedim. C # 'ın kolaylaştığı C ++ ile yaşadığım sıkıntıların üstesinden gelmek için daha fazla temel bilgi edinmem ve zayıflıklarımı keskinleştirmem gerektiğini fark ettim. Hiç C # bazı şeylerin basitliğini özledim mi? Hatta değil! Nasıl bir C ++ sorunsuz çalışacağımı biliyorum.
Düşük seviyeli kütüphaneler veya DirectX / OpenGL öğrenmek sizi korkutuyorsa, tam bir video oyunu yaratmanın karmaşıklığına girmeye başlayıncaya kadar bekleyin.
Oyun motorları hakkındaki felsefem, izole koşullar dışında motorların artıklığını ve yararsızlığını açıklayan iki örnekle özetlenebilir.
Düşük seviyeli kütüphanelerle korkutulmuş yeni başlayanlar, Unity gibi yüksek seviyeli bir motorla bile (grafik oluşturma, ses çalma, içerik yükleme; gerçek temel şeyler) bir oyun yapmakla neredeyse aynı olacağını keşfettiklerinde bir nöbet geçirecekler. sıfırdan. Karmaşıklık, bir oyunu tasarlamada, API'yi anlamada veya ekrana dönüştürmek için sınıfları geliştirmede değildir.
Unity gibi bir şeyde tam bir oyun yaratmanın karmaşıklığından korkmayan uzmanlar, Unity için hiçbir işe yaramazlar, çünkü belirli bir motorun API'sını ve gereksinimlerini güvenle öğrenmek için geçen süre muhtemelen daha fazla baş ağrısıdır ve Temelleri yapmak için gereken birkaç sınıfı kodlamak için gereken süreden daha uzun.
Bu yüzden motorlar yeni başlayanlar için işe yaramaz, çünkü yeni başlayanlar onlarla hiçbir şey yapamazlar çünkü mühendislik becerilerinden yoksundurlar. Benzer şekilde, motorlar gaziler için işe yaramaz, çünkü zaten bir motor olmadan bunu yapmak için mühendislik becerilerine sahipler ve hem oyun motorunun API'sını öğrenmenin baş ağrısından geçmek yerine kendi daha verimli, özel 'motorlarını' yuvarlayabilirler, işlevleri ve performans tuhaflıkları. Açık kaynak olmadıkları için bazen dokunamayacağınız motorlarla çalışmanın muazzam kabusundan bahsetmiyorum (ya da öyle olsalar bile, başkalarının kodunu okumak bazen bir kabus olabilir).
Heck, hatta bazı "düşük seviyeli" "oyun çerçeveleri", bir pencere oluşturmak, ekrana render etmek ve ses çalmak için birkaç sınıftan başka bir şey değildir. Bu, bir profesyonelin SDL / SFML gibi diğer kütüphaneleri veya kendi OpenGL / DirectX / OpenAL uygulamasını kullanarak sıfırdan yapabileceği bir şeydir, tam bir video oyununu tamamlamak için gereken sürenin bir kısmında.
TLDR;
Programlamak istiyorsanız, programcı olmayı öğrenin .
Motor kullanmaktan kaçının , ama aptal olmayın ve inanılmaz derecede faydalı kütüphaneleri görmezden gelin.
Oyun Tasarımcısı olmak istiyorsanız , bir WYSIWYG motoru deneyin ve bu oyunları dışarı pompalayın!
Bir Oyun Programcısı olmak istiyorsanız , koltuk değneği gibi motorlardan kaçının.
Benim için , daha üst düzey oyun motorları kullanmak programcı olma yeteneğimi sakat bıraktı. Bunun yerine daha düşük seviyeli kütüphaneleri kullanmaya başladığım ya da hiç kütüphane kullanmadım, o kadar çok şey öğrenmeye başladım ki, hemen hemen yeni bir acemi, şimdi yanımda herhangi bir referans, öğretici veya kitap olmadan video oyunları oluşturabilen birine geçtim. Sadece derleyicim ve bir sürü mühendislik ve uygulama.
KISA bir zaman diliminde düşük seviyeli kütüphanelerden kazandığım öğrenme miktarı, yüksek seviyeli MOTORLAR ile ÇOK UZUN bir sürede kazandığım miktardan çok daha fazlaydı. **