Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Zitat
Diese generiert den für die gewünschte Operation benötigten Code dynamisch zur Laufzeit als Expression Tree, kompiliert ihn, packt ihn in ein Delegate und ruft dieses dann intern auf. Nach einmaliger Codegenerierung ist der Overhead dann auch nicht mehr größer als zwei Methodenaufrufe und ggf. zwei bis drei Type Casts. Was das Prinzip der generischen Operatoren angeht, ahbe ich mich > hiervon < inspirieren lassen.
Zitat
Diese generiert den für die gewünschte Operation benötigten Code dynamisch zur Laufzeit als Expression Tree, kompiliert ihn, packt ihn in ein Delegate und ruft dieses dann intern auf. Nach einmaliger Codegenerierung ist der Overhead dann auch nicht mehr größer als zwei Methodenaufrufe und ggf. zwei bis drei Type Casts. Was das Prinzip der generischen Operatoren angeht, ahbe ich mich > hiervon < inspirieren lassen.
Das was du da machst ist ziemlich langsam. Das sollte man eher sparsam einsetzen, und auch vor allem nicht im Produktivcode für ein Spiel. Hast du mal unterschiede in der Performance mit ein paar 100 Objekten und Verwendung deine Methode gemacht? Wenn es exakt das tut, was ich denke, sollte das merklich sein.
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
System.Diagnostics.Stopwatch w = new System.Diagnostics.Stopwatch(); for (int k = 0; k < 10; k++) { System.Threading.Thread.Sleep(10); w.Restart(); double sum = 0.0d; for (int i = 0; i < 100000; i++) { sum += 0.728935d * (i % 10); } w.Stop(); Console.WriteLine("{0:F}", w.Elapsed.TotalMilliseconds, sum); w.Restart(); double sum2 = 0.0d; for (int i = 0; i < 100000; i++) { sum2 = GenericOperator.Add(sum2, 0.728935d * (i % 10)); } w.Stop(); Console.WriteLine("{0:F}", w.Elapsed.TotalMilliseconds, sum2); } |
Viel spanndender wäre die Frage, was aus deinem Projekt geworden ist, was Duality benutzen sollte. Gibt es da fortschritte?
Wie genau hast du Gwen integriert? Ich bräuchte dabei ein wenig Hilfe, ich habe leider keine Ahnung wie ich es einbinde.Habe mal früher deine Engine genutzt und was mich persönlich gestört hat ist das es kein DontDestroyOnLoad gibt wie in Unity: http://docs.unity3d.com/Documentation/Sc…troyOnLoad.html
Vielleicht aber auch nur übersehen.
Und ein GUI System wäre auch gut.
Was gut war, das die Engine Open Source ist.
Da ja im Hintergrund OpenTK genutzt wird konnte ich GWEN einbinden und so ein GUI System einbauen.
http://www.opentk.com/node/2811
Lad dir das Duality Projekt runter.
Es gibt doch die DualityApp dort erstellst du eine static Property für z.b. das Canvas das man zum zeichnen braucht.
Nun kannst du mir DualityApp.Canvas (o.ä.) darauf zugreifen und in der Camera Klasse (müsstest ein bisschen mal suchen) muss dort das Rendering rein.
Glaube war DualityApp.Canvas.RenderCanvas().
Den DualityLauncher erstellst du ganz neu weil dort das GameWindow das Gwen braucht.
Erstellt und init. alles von Gwen und übergibst dann einfach bevor das Spiel gestartet wird das Canvas an DualityApp.Canvas = _Canvas;
Die Controls aus dem Editor gefallen mir, hast du die Selbst geamcht wenn nicht wo bekommt man die her.
Grüße Andy
Werbeanzeige