Oyun nasıl yapılmaz!
tHemT
Üye
Herkez başlığın diğer tarafını soruyor! yani oyun nasıl yapılır bunu anlatmak çok zor ben ise nasıl yapılamayacağını yazarım:

1) Programlama dili öğrenmezsen
2) Dili öğretecek kitap gibi kaynakları okumazsan
3) Oyun denen şeyin ne olduğunu bilmezsen
4) Günümüz teknolojilerini bilmezsen
5) Oyun motoru yapacam diye didinirsen
6) Araştırıp öğrenmezsen
7) Doğru insanlarla iletişime geçmezsen
8) Oyun sadece programlamadan ibarettir sanırsan
9) Tekerleği tekrar tekrar icat edersen

... oyun yapamazsın :D
Barnz
Üye
Bu tür şartlara bağlı bir öğrenim vermek yerine daha eğlenceli bir şeyler yapabilirdin. Türkiye için en uygun yöntem (bence) belirli bir oyun için eklenti geliştirerek, bir geliştirici kuruluşa girmek.
darth_revan
Üye
4- Günümüz teknolojileri çok değişiyor yahu. Şimdi korkuyorum DirectX10 öğrenmeye. Ama el mecbur, öğreneceğim sanırım. OpenGL'i her yönüyle tercih ediyorum yalnız, ciddi değişimlere gitmiyor DirectX gibi.

5- İşlerin nasıl yürüdüğünü bilmemiz gerekir bence. Tamam, oyun yapımıyla hiç ilgilenmemiş biri için motor yapımı ağır gelebilir, ama her hardcore programcı gibi ben de minimum kütüphane-kit, maksimum kendi yaptığımız kütüphaneler diyorum.

9- Tekerleği icad etme konusunda "Programming a game engine" adlı kitabın yazarı Stefan Zerbst şöyle söylüyor: "Cehennemi göremeyenler, cennetin tadını çıkaramazlar". Her zaman zordan yanayım ben :D

Türkiye'de de oyun türkçe programlama kaynaklarına bakarak yapılmaz :D GLUT ile pencere açmaktan fazlasını öğretmiyorlar :D Vaktim olursa geniş bir tutorial yazmayı düşünüyorum ben, programcılık mantığından algoritmalara ve birkaç API'a kadar.

Ekleyeyim bu arada:
"RPG yapma kitabı", "Kendinize 24 saatte multiplayer FPS yapmayı öğretin!" gibi kitaplardan medet ummak da oyun yapmanıza yardımcı olmaz bu arada, daha temel başlamanızı öneririm.
tHemT
Üye
Amaç oyun yapmaksa, ogreyi tekrar yazmaya çalışmak salaklıktır! Ne yani ben oyun yapmak istiyorum ama openGl mi seçsem? yoksa direcx mi? ya da software mi yapsam? bu soruları bilmeyen biri sorar! zaten ogre bir grafik kütüphanesi, bunlara hiç bulaşmadan sana istediğini en iyi şekilde sağlıyor! ya şimdi de ses lazım? acaba directsound mu yoksa openal mı? hangisi seçsem al 2. bir aptal soru zaten bunların bir üst katmanı var bir sürü kütüphane... amaç oyun yazmaksa derinlere girmeyeceksin zaten her biri uzmanlık gerektiren alt konular... ne yani? varolan kütüphaneleri tekrar yapmaya çalışan biri oyun yapamaz! eminim yaptım diyen çıkacaktır :D göstersin bakalım nasıl birşey!
darth_revan
Üye
Dediğim yol, "ben oyun programcısıyım" diyen insanları azaltıyor baya. Ama bu sayede, oyun programcılarının hepsi lineer cebir, 3 boyutlu geometrik işlemler ve ileri matematik gibi konularda bilgili olur. Ayrıca, en iyi kullanacağın kod, kendi yaptığındır.

Bu arada, ogre motorundan önce hiç mi motor yoktu? Peki adamlar neden bu motoru yazdı? Irrlicht, Cube gibi motorlar falan niye yazılıyor ki o zaman?

Varolan kütüphaneleri tekrar yapanlar Unreal motorunu yapıyor mesela, bu motorun platform bağlılığı bile yok. Bu kadar iyi ve optimize edilmiş bir motor yapamazsın belki, ama gaza basıp yanlışlıkla gitmek istediği yere ulaşan bir adamdan farkın olmalı. Ne yaptığını bilmelisin.

Ayrıca, her programcı bilmelidir ki, hiçbir kod mükemmel değildir, her kütüphanenin bugları olabilir. Bir kütüphaneyi bu kadar tanrısallaştırmak sadece zarar verir sana. "Var olan en iyisidir" mantığını ilk defa görüyorum.
giray
Üye
Bir programciya bir gorev verildiginde ilk yapmasi gereken "bu alanda neler yapilmis" diye bakmaktir. Eger hazir olan ve amaclara uygun herhangi bir sey varsa onu kullanmalidir/modifiye etmelidir. Aksi takdirde zaman (ve dolayisiyla para) kaybetmis olur. Zira bir seyi bastan yazarak harcayacagi zamani cok daha verimli kullanabilir.

Sapla samani ayirmak lazim, Unreal motoru da varolan pek cok kutuphaneyi aynen kullaniyor. Sadece gercekten gereken seyleri bastan kendileri yaziyorlar. Ustelik onlarin amaci oyun motoru yazmak, yani gereksinimler sadece oyun yazmaktan cok daha genis ve esnek olmak zorunda, dolayisiyla hazir ve amaca uygun bir sey bulmak cok daha zor.

Her oyun programcisi elbette lineer cebir, 3d matematik vs bilmelidir. Ama ciddi bir oyun projesi yaparken her seyi bastan ve dogru sekilde yazmaya vakit olmayacaktir. Ayrica binlerce programci tarafindan yillardir kullanilan (ve dolayisiyla gelistirilen) bir kutuphanenin daha az bugli ve kullanisli olma ihtimali oldukca yuksektir.

tHemT
Üye
Eveeettt süper! yazımdan hiç birşey anlaşılmamış o zaman cümleleri açıyorum ama önce konu başlığını tekrarlayım : "Oyun nasıl yapılmaz!"

"Amaç oyun yapmaksa, ogreyi tekrar yazmaya çalışmak salaklıktır!"

Şahıs burda demek istiyor ki, oyun mu yapmak istiyorsun! yap o zaman, grafik işleriyle uğraşma, alt konulara girme amacına odaklan

"Ne yani ben oyun yapmak istiyorum ama openGl mi seçsem? yoksa direcx mi? ya da software mi yapsam?"

Hala grafikle mi uğraşıyorsun? sen akıllanmayacaksın!

"bu soruları bilmeyen biri sorar!"

Artık öğrenmeyi öğrenmelisin

"zaten ogre bir grafik kütüphanesi, bunlara hiç bulaşmadan sana istediğini en iyi şekilde sağlıyor!"

Adamlar zaten senin yapacağını yıllar önce yapmaya başlamış! sen şimdi başlasan onar kimbilir nerede olacak!

"ya şimdi de ses lazım? acaba directsound mu yoksa openal mı? hangisi seçsem al 2. bir aptal soru zaten bunların bir üst katmanı var bir sürü kütüphane..."

Hala mı buradasın?

"amaç oyun yazmaksa derinlere girmeyeceksin zaten her biri uzmanlık gerektiren alt konular..."

Oyun denen şey büyük bir mecra ve matematiksel konu hepsine yetemezsin!

"ne yani? varolan kütüphaneleri tekrar yapmaya çalışan biri oyun yapamaz!"

Sanırım kütüphaneci olacaksın? :D

"eminim yaptım diyen çıkacaktır Cheesy göstersin bakalım nasıl birşey!"

Var mı?
darth_revan
Üye
giray dedi:


Her oyun programcisi elbette lineer cebir, 3d matematik vs bilmelidir. Ama ciddi bir oyun projesi yaparken her seyi bastan ve dogru sekilde yazmaya vakit olmayacaktir. Ayrica binlerce programci tarafindan yillardir kullanilan (ve dolayisiyla gelistirilen) bir kutuphanenin daha az bugli ve kullanisli olma ihtimali oldukca yuksektir.


Tabii ki yaptığı motor-kütüphane var olan kadar iyi olmayacaktır. Fakat insanın işlerin nasıl yürüdüğünü bilmesi gerekir bence. Her seferinde, her projede tekrar tekerlek icad edilmemeli, ama tekerleğin nasıl icad edildiğini de bilmeli insanlar.

Mesela bilim olimpiyatlarında insanlara her sort tipini, her veri yapısını yazdırırlar. STL'de daha iyisi vardır, evet. standart gelen qsort fonksiyonu kadar iyi bir quicksort yazamayız, onu da biliyorum. Fakat qsort fonksiyonunun nasıl çalıştığını, neyi nasıl yaptığını, karmaşıklığının n log n olduğunu bilmek zorundayım. Yoksa programcı olmam. Yani, "hayır süper bir programcı olursun" dersen bir şey diyemem, deneyim konuşuyordur karşımda, ama öğrendiklerim bunları söylüyor. STL kullanırım, ama her fonksiyonun ne yaptığını bilirim. Programcılıkta "lamer"lık kütüphane kullanıcılığı olsa gerek.

Diyelim ki Ogre motorunda bir oyun yaparken bug çıktı, ne yapacaksın? Motoru baştan sona mı okuyacaksın, yoksa aynı şeyi farklı kodlarla mı yazmaya çalışacaksın tHemT? Ogre motorunun neyi nasıl yaptığını iyice bilmeden iyi kullanamazsın. Hangi yolun daha hızlı olacağını bilemezsin. Motoru baştan sona okuyup anlayabiliyorsan, zaten motor yazabilecek kapasiteye gelmişsindir.

Ne yaptığımı bilmeden bir şeyler yapacak olsaydım DirectX Extensions kütüphanesini kullanırdım, her şey için yapısı var, üstelik nesne tabanlı kodlanmış. Ama D3DX'in MESH sınıfının ne yaptığını, fonksiyonları nasıl çağırdığını bilmezsem, şu meşhur ".x" dosyalarında verilerin nasıl saklandığını bilmezsem "lamer" programcı olurum. İşin kolay yoluna kaçmayın yahu, en başta işlerin nasıl yürüdüğünü öğrenin.

Ekleyeyim: Var olan kodları kullanarak oyun yapmaya çalışırsanız c/p programcısı olursunuz. Belki crimsonland gibi bir oyun yazarsınız (ben yazdım DirectX'te :D), ama "şura ne işe yarıyor" diye sorunca biri, "bilmem, şu kitaptan kopyaladım" dersiniz. Oyun yapımında deneyim önemlidir ve ilk oyununuzu yaparken minimum deneyim kazanma yoluna gitmeyin bence. (Stefan Zerbst, tam olarak böyle programcıdan bahsediyor kitabında)
giray
Üye
Farkli seylerden bahsediyoruz. Complexity, temel algoritmalar, bellek yonetimi gibi seylerden haberi olmayan birisi zaten oyun programcisi olamaz. Bunlarin hepsini de tercihen okulda ya da kendi kendine pratik olarak tecrube etmis olmali.

Ama oyun yapiminda kutuphane kullanan birisine "lamer kutuphane programcisi" diyemezsiniz. O zaman butun profesyonel oyun sektorunu bununla suclayip komik duruma dusersiniz. Deneyim onemlidir, kendi siniflarinizi kutuphanelerinizi olusturmaniz da faydali olacaktir. Ama isin ogrenme kismidir bu. Siniri nereye cizecegiz ayrica? Biri cikip "kendi API'ini yazmayip Direct3D kullanan programci sayilmaz" derse ona ne diyecegiz? Yil 1988 degil ki kendi device driver'imizi yazalim.

Diyelim ki Ogre motorunda bir oyun yaparken bug çıktı, ne yapacaksın? Motoru baştan sona mı okuyacaksın


Unreal Engine 3 kullaniyorum, motorun kendisinde bug buldugumda duzeltiyorum ve Epic'e haber veriyorum. Bunun icin kodu kendim yazmis olmam gerekmiyor. Motorun herhangi bir parcasina baktigimda anlayabiliyorum ama gerekmeyen yeri anlamak icin zaman kaybetmeme gerek yok.

Yani onemli olan bilgisayar bilimine hakim olmak, ama bu hamallik yapmanizi gerektirmiyor. Quicksort'un karmasikliginin nlogn oldugunu bilmeden zaten is bulamazsiniz.
darth_revan
Üye
Her işini kütüphanelerle halledip, işleri nasıl halletmediğini bilmeyen birine lamer programcı diyebilirim gayet. Bu iş ehliyet sahibi olmak gibi bir şey. Araba kullanmanız için ehliyet gerekiyor, ama kimse ehliyeti var diye, araba sürüyor diye kendi arabasını kendisi yapmaz. Aracı kullanmak için ortalama düzey bilgiye sahip olur. Kastım da bu zaten, yani herkes low level çalışacak, Assembly bilecek demiyorum. Assembly kodu yazamazsınız, ama birkaç keyword bilirsiniz, "MOV ne la ehehe" demezsiniz.

O kadar derine inmenin gerekliliğini savunmuyorum dediğim gibi (yararını savunuyorum), ama internette gördüğümüz tutorial'daki kodları kopyalayarak bir yere varamayız. quicksort'un nasıl çalıştığını bilirsiniz, ama kendi kodunuzu kullanmazsınız.

Ayrıca, sınırı ne kadar alta çekersek, o kadar iyi olacağını düşünüyorum. Mesela, her ekran kartına doğrudan bilgi yollayabilmeyi bilseydim, doğrudan erişebilseydim ekran kartına, çok daha hızlı oyunlar yapabilirdim. Biraz ütopik olduğunun farkındayım, ama daha az uğraş gerektiren şeylerde (programlama matematiği, çoğu algoritma gibi) neyin nasıl olduğunu öğrenmeliyiz.

Motorların Map Editor'u oluyor genelde. BSP kullanan bir motor düşünelim mesela. Biri BSP'nin ne olduğunu bile bilmeden editoru kullanabilir, ama bu işte ciddi ise BSP'nin ne olduğunu bilir (harita tasarımcısı gibi görevlerden bahsetmiyorum).

Düzeltme: Zaten gerginlik yanlış anlaşılmadan çıktı sanırım. Ben "Kütüphane ve motor kullanan programcı programcı değildir, her şeyi low level yapalım" diyormuşum gibi oldu. Fakat amacımın insanların ne yaptığını bilmeden yapmasını engellemek olduğu anlaşılmıştır sanırım şimdi.
tHemT
Üye
:D ya ne polimik seven insanlarız... doğrularını söyle çekil yaf! :D hehe ayp
discussioncontroller