2010-02-25 4 views
6

Ich bin kürzlich in den XNA-Pool eingestiegen und lerne alles über das Framework in C#. Eine Sache, die ich bei meinen Nachforschungen festgestellt habe, ist, dass es anscheinend keine allgemein akzeptierte "richtige" Methode zur Implementierung von GameComponents gibt.XNA GameComponent Implementierungseinstellungen ...?

Nach der Lektüre this thread (unter anderem), habe ich ein breites Spektrum von Präferenzen unter Spiele-Entwickler entdeckt. Ich habe einige Befürworter gesehen, die GameComponents niemals (oder nur sparsam) benutzen, während andere behaupten, sie für alles zu benutzen, bis hin zu den Spielern/gegnerischen Einheiten, Raketen usw. Dann gibt es einige, die moderater sind Vorgehensweise, und reservieren Sie die GameComponent-Architektur für Entitäten mittlerer bis hoher Ebene wie Bildschirme, Renderer, Szenen usw., die wiederum ihre granulareren Spieleinheiten enthalten und steuern.

Am Ende des Tages, es ist bis zu den Game-Entwicklern zu ermitteln, wie der Rahmen zu implementieren. Da StackOverflow voll von cleveren Entwicklern ist, die mehr vergessen haben als ich jemals wissen werde, möchte ich ein Gefühl dafür bekommen, was der Konsens ist, bevor ich diesen Weg weiterführe, indem ich das Framework selbst benutze.

Wer interessiert sich für ihre Gedanken? Danke im Voraus!

Antwort

2

Ich bin auch ziemlich neu zu XNA, also nehmen Sie diese Antwort mit einem Körnchen Salz.

Ich denke, es kann auf eine Stilvorliebe herunterkochen. Ich bin mir nicht sicher, welche Leistungsmerkmale zwischen der Verwendung von GameComponent und manuellen Verfahren bestehen, aber ich weiß, dass ich persönlich frustriert war, GameComponent zu verwenden, da es nicht mit meinem Denk- oder Programmierstil in Einklang gebracht wurde. Im Grunde bin ich eine Mischung aus Dingen, die ich aus OOP, prozeduralen, funktionalen und anderen Programmierparadigmen übernommen habe. GameComponent scheint einen strengen OOP-Ansatz zu verwenden.

Aber ich werde sagen, dass alles eine GameComponent, oder sogar eine Klasse im Allgemeinen, problematisch werden kann, wenn Leistung betroffen ist. Fragen der maximalen Lesbarkeit und Wartbarkeit scheinen in der Welt der Spieleentwicklung auf dem Vormarsch zu sein, wo man manchmal nur die Optimierung aus dem Code herausquetschen muss. Zum Beispiel ist es manchmal besser, eines deiner Spielobjekte in eine Struktur (Werttyp) zu verwandeln, damit du etwas Speicher sparen und den lästigen Müllsammler davon abhalten kannst, dein Spiel zu verzögern (wie ich es in this question I asked gelernt habe).

+0

Danke für die Antwort! Ich habe gehört, dass die Verwendung der Game.Components-Sammlung einen geringen Overhead verursacht, aber es klingt so, als würden Sie etwas anderes tun. Glauben Sie, dass die Schaffung eines eigenen Entity-Hierarchie-/Managementsystems ein größeres Leistungspotenzial bietet? – Syndog

+0

Es tut mir leid, ich weiß es wirklich nicht. Sie haben sicher mehr Kontrolle, also können Sie vielleicht mehr Leistung herauspressen. Aber andererseits weiß MS vermutlich, wo sie gerade sind und hat die Leistung von GameComponent zu Beginn gedrückt :) Aber für bestimmte Objekte, besonders wenn Sie planen, eine Menge davon auf dem Bildschirm zu haben (wie Kugeln), sind sie lieber links Strukturen aus Performance-Gründen – Bob

+0

GameComponents wird als eine Liste intern implementiert werden, kann nicht viel effizienter als das! Was Strukturen betrifft, bin ich mir nicht sicher, ob das eine großartige Idee ist. Wenn man eine Struktur in C# übergibt, wird das viele Werte kopieren. Der Müllsammler ist nur langsam auf der Xbox, auf dem PC kann man es ziemlich einfach vergessen. – Martin