Spieleprogrammierung in C# ?



  • Mhh Mist, ihrgendwie hat er es doppelt gepostet.



  • Bitte den GC nicht so einseitig als Performance-Nachteil darstellen. Beim Reinigen (und nur dann!) kann das Programm schon mal für ein paar ms gestoppt sein. Dafür kann man blitzschnell allokieren, in aller Regel deutlich schneller als bei einem fragmentierten Heap, wie man ihn in C/C++ hat.

    Und es ist ja nicht so, als würde jede Sekunde eine Bereinigung durchgeführt...

    Außerdem bieten sich bei dem managed Heap noch weitere Optimierungsmöglichkeiten im Zusammenhang mit Cache misses, weil es garantiert ist, dass nacheinander allokierte Objekte nebeneinander im Speicher stehen.



  • Schreitet der GC nicht dann erst zur Tat, wenn die Systenmbelastung sehr gering ist?



  • In der Theorie schreitet er zur Tat, wenn der Heap voll ist. In der Praxis wird laut MSDN eine heuristische Funktion verwendet, die viele Faktoren berücksichtigt, um den GC zu starten.

    Ich verfahre nach folgendem Prinzip:
    Ich gehe im Allgemeinen davon aus, dass der GC selber am besten weiß, wann er anspringen soll. Wenn ich gerade eine Situation habe, in der ich viele Objekte freigebe und die Performance gerade nicht kritisch ist (z.B. im Spiel -> Rückkehr zum Hauptmenü) werf ich ihn außerdem noch selber an.

    Ich habe eigentlich nie die Erfahrung gemacht, dass ein GC meine Performance ruiniert. 🙂 Und das schnelle Allokieren ist godlike :sabber:



  • Optimizer schrieb:

    Ich verfahre nach folgendem Prinzip:
    Ich gehe im Allgemeinen davon aus, dass der GC selber am besten weiß, wann er anspringen soll. Wenn ich gerade eine Situation habe, in der ich viele Objekte freigebe und die Performance gerade nicht kritisch ist (z.B. im Spiel -> Rückkehr zum Hauptmenü) werf ich ihn außerdem noch selber an.

    Hallo Optimizer,
    wie startet man den GC manuell?



  • G4M3M4St3R schrieb:

    wie startet man den GC manuell?

    Schau Dir mal die Klasse GC an.



  • System.GC.Collect();



  • Danke, hätte man sich ja fast denken können 😃
    Verwendet ihr für eure Spiele eigentlich DirectX bzw. OpenGL oder die GDI+?



  • Naja ich würde mit GDI eher ne Wirtschaftssimulation oder so programmieren, aber DirectX oder OpenGL werde ich für mein nächstes Spiel verwenden muss nur mal schauen mit was es sich einfach realisieren lässt. 🙄



  • oh hier war ja einiges los seit ich das letze mal reingeschaut habe 🙂
    ja es ging mir dabei um direct3d.. habe mittlerweile angefangen c++ mir an zu eigenen.. konnte davor schon c ^^
    leider gibt es noch keine bücher in der richtung c# + direct3d die meisten sind englisch und das würde den lernprozess 500% verlangsamen ^^



  • wenn du die directx sdk9 installiert hast, ruf doch mal den sample-browser auf, da iss das zeugs ganz gut beschrieben.

    zum beispiel:

    public  static bool   CreateDevice(Form form)
    			{
    				frmMainForm=form;
    				try
    				{
    					// Now let's setup our D3D stuff
    					Microsoft.DirectX.Direct3D.PresentParameters presentParams = new Microsoft.DirectX.Direct3D.PresentParameters();
    					presentParams.Windowed=true;
    					presentParams.SwapEffect = Microsoft.DirectX.Direct3D.SwapEffect.Discard;
    					presentParams.EnableAutoDepthStencil = true; // Turn on a Depth stencil
    					presentParams.AutoDepthStencilFormat = Microsoft.DirectX.Direct3D.DepthFormat.D16; // And the stencil format
    
    					objDevice = new Microsoft.DirectX.Direct3D.Device(0, Microsoft.DirectX.Direct3D.DeviceType.Hardware, form, Microsoft.DirectX.Direct3D.CreateFlags.SoftwareVertexProcessing, presentParams);
    					// Turn off culling, so we see the front and back of the triangle
    					objDevice.RenderState.CullMode = Microsoft.DirectX.Direct3D.Cull.None;
    					// Turn off D3D lighting
    					objDevice.RenderState.Lighting = false;
    					// Turn on the ZBuffer
    					objDevice.RenderState.ZBufferEnable = true;
    
    					return true;
    				}
    				catch (DirectXException)
    				{ 
    					return false; 
    				}
    			}
    


  • Echtzeitstrategiespiel "Arena Wars" unter .NET:
    http://www.dotnetpro.de/news442.aspx



  • OMG, das ist ja noch von der ganz alten Schule! 😮 😮 😮
    Einheiten bewegen sich strikt innerhalb von Zellen und können nur in 8 verschiedene Richtungen gehen! OMG! 😮 😮 😮



  • JEder fängt mal klein an ^^



  • Hallo Leute, bin neu hier, programmiere aber schon ein bisschen länger. Ich
    wollte auch mal aus Neugierde in die Spieleprogrammierung reinschnuppern
    (programmiere seit Jahren 'ernste' Wirtschaftsanwendungen). Ursprünglich
    wollte ich C++ einsetzen, weil das ja die 'Profis' verwenden. Seit ich aber C#
    kenne bin ich von der Sprache begeistert und ziehe sie, wenn möglich, C++ vor.

    Deshalb die Frage, die ja in diesem Thread schon halbwegs positiv beantwortet
    wurde: Ist C# wirklich uneingeschränkt für die Spieleentwicklung geeignet? Wie
    groß ist der Performanceunterschied zu C++?

    Und wo kann ich Beispielcode finden? Am besten ein fertiges Spiel. Und noch
    eine Frage: Gibt es irgendwie eine Spieleentwicklungs-Community, die nicht nur
    auf die reine Programmierung beschränkt ist? Ich kann 'nur' programmieren,
    für Grafik, Sound, Musik etc. bin ich auf die Hilfe anderer angewiesen. Wo
    kann ich solche Leute finden?

    Danke!



  • MarkusS schrieb:

    Wie groß ist der Performanceunterschied zu C++?

    Schau mal die 1. Antwort in diesem Thread an (von Marc++us), die beantwortet das doch recht gut.

    MarkusS schrieb:

    Und wo kann ich Beispielcode finden? Am besten ein fertiges Spiel. Und noch eine Frage: Gibt es irgendwie eine Spieleentwicklungs-Community, die nicht nur auf die reine Programmierung beschränkt ist? Ich kann 'nur' programmieren,
    für Grafik, Sound, Musik etc. bin ich auf die Hilfe anderer angewiesen. Wo
    kann ich solche Leute finden?

    Ich denke hier sind genug fähige Leute die Dir da auch helfen können, ansonsten siehe meine Signatur.



  • MarkusS schrieb:

    [...]Ich kann 'nur' programmieren,
    für Grafik, Sound, Musik etc. bin ich auf die Hilfe anderer angewiesen. Wo
    kann ich solche Leute finden?

    Danke!

    Also solche Leute zu finden ist schon sehr schwer. Da musst du meistens schon was her zeigen damit du ein paar gute Grafiker etc. bekommst 😉



  • Joey schrieb:

    MarkusS schrieb:

    [...]Ich kann 'nur' programmieren,
    für Grafik, Sound, Musik etc. bin ich auf die Hilfe anderer angewiesen. Wo
    kann ich solche Leute finden?

    Danke!

    Also solche Leute zu finden ist schon sehr schwer. Da musst du meistens schon was her zeigen damit du ein paar gute Grafiker etc. bekommst 😉

    Höhö, das ist ja ein Problem. Ein Grafiker versteht nichts von guten Codes, darum kann man ihn wohl auch nicht besonders gut überzeugen. 😉

    Liebe Grüße
    Real



  • Noodles schrieb:

    Schau mal die 1. Antwort in diesem Thread an (von Marc++us), die beantwortet das doch recht gut.

    Ja, habe ich gelesen. Die grundsätzliche Problematik der GC ist mir auch klar und Lösungsvorschläge wurden ja hier auch schon gemacht. Mir ging es da mehr um Erfahrungswerte, wie z.B. C# ist 5,7% langsamer als C++ oder so.

    Oder anders gefragt: Gibt es Spiele die mit C# nicht zu realisieren wären?



  • @MarcusS

    Zieh mal die DirectX9 SDK und installiere diese, dann sieh dir mal im Samplebrowser die C#- Beispiele an.

    Mit diesem "Beispielcode" kannste dann mal ein "Grundgerüst" für ein eigenes Spiel zusammenzimmern.


Anmelden zum Antworten