Oyun programlama: C # veya C ++? [kapalı]


15

Gerçekten istediğim şeyin oyun programlaması yapmak olduğuna karar verdim. Yani soru şu ki, kendi kendine öğretilen programlamayı öğrenmek isteyen 18 yaşında, C # ve C ++ arasında en uygun programlama dili nedir? (Unix'i umursamadığımı belirtmeliyim çünkü pencerelerin hala en çok kullanılan işletim sistemi olacağına inanıyorum)

C ++ temellerini biliyorum, ama C # hakkında hiçbiri. C ++, daha fazla öğretici kılavuzları, dll ve bunun gibi şeyler olduğunu biliyorum, C # yok, ama öğrenmek ve bir program geliştirmek için tek bir kişi için kullanmak çok daha kolay, ama program şaşırmış olsa bile okudum kaynağını almak kolaydır.

İlk başta biraz temel odaklanmak istiyorum, sadece kendimi daha uygun hissettiği için C ++ tercihim olduğunu söylemeliyim, ama yalnız çalıştığımı düşünmeliyim. Bu yüzden sevsem bile, yapılacak en iyi şey olmayabilir.

Gerçekten hangisi için gitmek emin değilim, çeşitli web sitelerinde çok konu okudum ve C # C ++ daha popüler hale geliyor gibi görünüyor. Ama evet, bununla birlikte, oyun programlaması yapmak istediğimi de belirttim. Bu yüzden sadece bulamadım çünkü sadece "C # .net bellek kullanımı nedeniyle C ++ kolay değil" daha iyi noktalar bilmek gerekir.


16
Ayrıca gamedev.stackexchange.com'u yararlı bulabilirsiniz .
Adam Lear


2
Ayrıca bakınız: gamedev.net
Patrick Hughes

Yanıtlar:


21

Bir oyunu programlayarak C ++ öğreniyorum. Bu çok keyifli bir deneyimdi. Sizleri de aynısını yapmanızı şiddetle tavsiye ediyorum!

Ancak şimdi bir C # programcısıyım, o zaman C # mevcut olsaydı çok daha verimli olurdu.

C # oyun geliştirmeyi öğrenmek için mükemmel bir seçimdir. Çerçevelerden kitaplara başlamak için ihtiyacınız olan her şeye sahiptir ve dil şaşırtıcıdır.

Özellikle C # Oyun Programlama üzerine yazılan düzinelerce kitap gördüm ve Microsoft, DirectX ve XNA dahil olmak üzere çerçevelerini geliştirmek için çok çaba sarf ediyor .

GÜNCELLEME : Eğer tarafından ilginizi çekebilir bu yanı. Miguel de Icaza'dan yeni bir blog yazısı .

GÜNCELLEME 2013-02-22 Microsoft, XNA desteğini durdurmayı planlıyor .


1
Belki de C ++ ile SDL ya da bunun gibi bir şey etrafında başlamalı sonra gelecekte C # geçmek .. gibi görünüyor sadece C ++ motor oluşturma dışında C # ile değiştirilmesi gibi .. Neden bir seçim yapmak çok zor !
Chronix

2
C # 'ın, bazı oyun platformlarında veya diğer endişelerde taşınabilirlik için değil, oyun geliştirmeyi deneyimlemek için mükemmel olduğunu anlayın. En iyi senaryo, her ikisini de kullanarak yeterince oyun geliştirmeyi bildiğinizde ve hedef platforma bağlı olarak C ++ veya C # seçtiğinizde ortaya çıkar.
Klaim

Bunun dışında +1 tabii ki. Şahsen hala C ++ tercih ediyorum ama bunun nedeni sadece projemin çoğunun projeye özgü bazı nedenlerden dolayı düşük seviyeli erişim gerektirmesidir.
Klaim

12

Çoğu oyun şirketi arka planda çalışan python betikleri veya diğer dillerle C ++ kullanır. Moreso, çünkü OpenGL ve DirectX için bağlamalar C ++ 'ı hedefliyor (C #' da Direct3d şeyler yapabileceğinizden eminim) ama oyun programlama için C ++ ANA dildir.

Ama size adil bir uyarı vereceğim (ve bunun sizi caydırmasına izin vermeyin) ama 3D grafikler son derece karmaşık olabilir. Yeni Direct3D, eskisinden daha kolay hale getirdi, ancak yine de iyi bir matematik (oldukça kafa karıştırıcı olabilir) ve sadece kütüphanelerin kendileri kafa karıştırıcı olabilir.

Önce çok basit bir şeyle başlardım. 2d şeyler için 3D'ye girdikten sonra SDL (Basit Directmedia Katman) kullanımı çok daha kolaydır (yukarıdan aşağıya oyun gibi bir şey için). MS, DirectX SDK belgelerinde bazı güzel Öğreticiler / Örneklere sahiptir, bu yüzden göz atmaya değer. Nehe öğreticiler biraz modası geçmiş olmasına rağmen hala güzel.

ama sorunuzu cevaplamak için, hepsi genellikle C ++ ile yapılır.


1
SlimDX, .NET için bir DirectX sarmalayıcısı sağlar
Danny Varod

1
"oyun programlama için, C ++ ANA dildir." Bu ifadeye katılmıyorum. Oyun pazarı sadece AAA konsol oyunlarından çok daha geniştir - bu, pazarın insanların fark ettiğinden çok daha küçük bir segmentidir. ActionScript gibi dillerde C ++ 'dan daha fazla oyun yazıldığını söyleyebilirim
MattDavey

8

Öncelikle bazı öncelikler belirlemek isteyeceksiniz. Önce bir oyun yapmak, daha sonra programlamanın daha gelişmiş yönlerini öğrenmek mi yoksa tam tersini mi yapmak istiyorsunuz? Her iki yaklaşımın da artıları ve eksileri vardır, ancak her ikisi de benim görüşüme göre meşrudur.

Oyun yapmaya başlamak istiyorsanız C # öğrenmenizi tavsiye ederim. Zaten C ++ temellerini biliyorsanız, o zaman hiç C # seçmek hiç sorun olmamalıdır. C # aracınızın avantajları vardır. Dili öğrenmesi kolaydır (C ++ ile karşılaştırıldığında) ve "yönetilen bir dildir", bu da sizin için otomatik olarak bellek tesisatını yaptığı anlamına gelir (C ++ yeni başlayanların ve hatta yeni başlayanların bile) ). Ayrıca, Microsoft'un sizin için sıkıcı su tesisatının daha fazlasını yapan XNA Framework'e erişmenizi sağlar. Bu da sizi oyun döngüsü ve tasarımı gibi şeylere konsantre etmenizi sağlar, işe koyma konusunda endişelenmenize gerek kalmadan (çok fazla). Doğru, tüm bu insta-sıhhi tesisatın ek yükü var, bu muhtemelen endüstri sınıfı 3D oyunlar yapmayacaksınız, ancak sadece oyun programlamaya giriyorsunuz, bu yüzden ilk denemenizde bir sonraki Haloyu yapacağınızdan şüpheliyim. :)

İşte başarılı bir XNA oyunu (Weapon of Choice) geliştiren adam tarafından yapılan bir ölüm ipi. C # / XNA kullanmanın, C ++ kullanmak zorunda kalmadan geliştirme zamanından nasıl tasarruf ettiğini detaylandırıyor. http://www.gamasutra.com/view/feature/3899/postmortem_mommys_best_games_.php

Bununla birlikte, en azından şeylerin arka planda nasıl çalıştığını bilmek için biraz zaman ayırmalısınız. Bir C ++ programcısı bunu nasıl yapar? İstediğiniz şey oyun endüstrisinde temel almaksa, C ++ 'da bir oyun yapmayı öğrenmek başka bir oyun geliştirme ekibine katılmayı kolaylaştırabilir (çoğu C ++' da çalışır). Ancak hiçbir zaman C ++ kullanmasanız bile, hangi dili kullanırsanız kullanın, dahili araçların nasıl çalıştığını bilmek sizi daha iyi bir programcı yapabilir.


Tamamen katılıyorum. C ++ ile karşılaştığınız bellek yönetimi sorunları en büyük sorundur. Üzerinde çalıştığım, hafıza sorunları olmayan bir oyun olmadı ve aynı şeyi düzinelerce oyun yapan 20 yıllık gaziler tarafından da duydum. RAII ve akıllı işaretçiler bile eski verilere işaret eden işaretçilerle ve sahiplikle ilgili sorunlarla karşılaştığınız için sorunu çözmez. Onları nasıl bulacağınızı ve onaracağınızı öğrenmek çok daha iyi bir programcı yapmanıza neden olur, ancak ilk kez bir arabellek taşması ve ilgisiz bir bölümde oyun çökmesi durumunda aylarca güdük olabilirsiniz.
Dominique McDonnell

Bu soruna, C # 'ın da XNA ( en.wikipedia.org/wiki/Microsoft_XNA ) avantajına sahip olduğunu eklemek isterim . XNA'yı yönetmek, yönetilmeyen DirectX'ten çok daha kolaydır.
Vitor Py

1
@DominicMcDonnell: C # gibi yönetilen çalışma zamanlarında bir yerde gizli olan şeylere atıfta bulunarak bellek sorunlarınız olabilir ve vurduğunda, kaynak yaşamları hakkında düşünmeye alışık olmayacağınız için avlamak çok daha zor olacaksınız.
Jan Hudec

@ JanHudec, bunu bilmiyordum. Sanırım bir şeyleri çalıştırmanın daha basit ve daha kolay olduğunu söyleyebilirsiniz, ancak got-yas'ları izlemek çok daha zordur ve bazı açılardan dilin oluşturmanıza izin verdiği alışkanlıklar engel olur.
Dominique McDonnell

3

Oyun geliştirme için C ++ 'ı çok destekliyorum. Çeşitli artıları ve eksileri olan birkaç ekstra engel var, en iyi nedenlerden biri taşınabilirlik.

C # ile bu günlerde biraz daha geliştirebilirsiniz ve orada kesinlikle programlanmış bazı şaşırtıcı büyük motorlar var. Her ikisi de oyun programlama için iyi dillerdir, sadece Windows / Xbox platformlarını hedefliyorsanız, özellikle C # 'a yaslanmak için nedeniniz olacaktır.

Öğrenmeniz gerektiğini düşündüğüm dil, bazı GPGPU dili olan OpenCL veya CUDA olacaktır. Şahsen ben OpenCL'yi tercih ediyorum, çünkü daha uzun sürecek ve daha fazla büyüyecek gibi görünüyor, temelde sadece C stili. C ++ veya C # için güzel bir sarıcı olan OpenTK var .

Donanım hızlandırma ile Ruby oyun programlamasının nasıl olacağını hep merak ettim ...


3

Ham oyun programlama sizi oldukça soğuk bırakacak. C # veya C ++ 'da düşük seviyeli grafik çağrıları ile çalışmak küçük bir kabustur ve 3D modelleri yalnız 2D modellerini oluşturma tekerleğini yeniden oluşturmak istemezsiniz. Kendi başınıza olduğunuz ve programlamayı öğrenmek istediğiniz için, en iyi seçeneğiniz sizi biraz öne çıkarabilecek bir çerçeve bulmaktır.

C tabanlı dile aşina olduğunuzdan, önerim Unity 3D'ye bir görünüm vermek olacaktır . Ticari oyun geliştirici mağazalarından benimsemede ciddi bir artış yaşıyor ve bazı ilginç platform seçeneklerine (PC, android, iPhone ve web çalışma zamanları dahil) sahip olmakla kalmıyor, aynı zamanda kullanımı çok kolay olan ücretsiz bir sürümü ve çok sayıda öğretici de var. konseptten uygulamaya nasıl geçileceğini göstermek için. En iyisi (IMO) desteklenen komut dosyası dillerinden biri C #.


2

İki yıl önce bir sınıf için bir oyun yaptım (o zaman 18 yaşındaydım) ve C # 'da yaptık. Büyük C # programlarının genellikle büyük C ++ programlarından daha yavaş çalıştığını gözlemlerken, C # da sizin tarafınızdan çok daha az çalışma gerektirir. Bellek yönetimi otomatik olarak yapılır ve ilk oyunun kapsamı için yeterince hızlıdır. (Oyunumuz tam teşekküllü bir 2D çok oyunculu Starcraft benzeri RTS'dir.)

Yönetilmesi daha kolay olması gerektiği için C # için root alırdım. Ancak, profesyonel bir oyun geliştiricisi olmak istiyorsanız, sadece Microsoft platformlarında çalıştığını unutmayın. (Yine de, C #, C ++ için iyi bir adım taşı olabilir ve iki dili yeniden öğrenmem gerekirse, önce C # öğrenmeye çalışırdım.)


C #, Mono (çapraz platform) üzerinde de çalışır, ancak çerçevenin bazı bölümleri (örn. WPF) desteklenmez.
Danny Varod

1
@Danny Varod, platformlar arası oyun geliştirme için Mono'yu gerçekten tavsiye etmiyorum çünkü şimdiye kadar özellikler açısından Microsoft'a karşı her zaman biraz geç kaldım ve değişmesini beklemiyorum. Ayrıca, Microsoft platformları için C # ile geliştirmenin büyük bir artısı XNA'dır ve Mono da DirectX'i sunana kadar, MS olmayan platformlarda çalışmaz.
zneak

1
DirectX'in Microsoft'un belirttiği gibi Mono'nun uyumlu bir OpenGL ambalajı sağlaması gerekecektir. Demek istediğim sadece C # kısmen taşınabiliyordu.
Danny Varod

2
Unity, monogame (mono için açık kaynaklı XNA) ve OpenTK arasında mono için birçok iyi oyun kütüphanesi vardır.
stonemetal

1

Ben C ++ oy vereceğini - bu çapraz platform olabilir çünkü öncelikle ve ayrıca ben size bellek yönetimi hakkında daha fazla bilgi verir düşünüyorum çünkü (tabii, senin kod yazmak nasıl bağlı olarak) - nedeniyle ihtiyaç bu konuda bakım. Ancak linux / unix'i umursamadığınız için, şu an için bellek karmaşıklığını dışarıda bırakmak istiyorsanız, neden şimdi C #'a odaklanıp C ++ öğrenmiyorsunuz?


Stack Exchange Programmers ile ilgili ilk sorunuzu cevapladığınız için teşekkür ederiz.
DeveloperDon

C ++, günümüzde hala en taşınabilir dildir. Özellikle mobil platformlarda bazılarının Java, bazılarının C # özelliği vardır, ancak çoğunun ikisinde birden yoktur. Ama hepsinde C ++ olmalı; sanal makinelerin yerel makine koduyla derlenen ve şu anda her zaman C ++ olan bir şeyde uygulanması gerekir.
Jan Hudec
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.