XGL - Open Source GameLibrary

    • Release

    Es gibt 35 Antworten in diesem Thema. Der letzte Beitrag () ist von nikeee13.

      XGL - Open Source GameLibrary

      Name des Programms:
      Xemio GameLibrary

      Beschreibung:
      XGL ist eine Open-Source GameLibrary für .NET, die mit dem Ziel entwickelt wurde, jegliche Abhängigkeiten zu minimieren. Ursprünglich war sie als private Library für Indiegames geplant, allerdings haben wir uns jetzt dazu entschieden, die Library doch zu veröffentlichen.

      Die Library basiert auf mehreren Grundkomponenten wie z.B. dem GameLoop, dem Scene Management und dem Rendering System. Dabei bildet der GameLoop die Kernkomponente und ist so konzipiert, dass er unabhängig von der Zeit, die für das Rendern oder Gameticks benötigt wird immer die selbe Anzahl an Ticks ausführt und das Spiel konstant läuft.

      Das Rendering System wiederum baut auf der GraphicsDevice-Klasse auf, das sich über die Komponentenverwaltung entgegennehmen lässt. Das GraphicsDevice bietet Zugriff auf den RenderManager und den GeometryProvider, die für das Darstellen von Bildern und geometrischen Formen verantwortlich sind. Dabei ist momentan erstmal nur ein GDI+ Renderer implementiert, der aber für Indiegames erstmal vollkommen ausreicht. Weitere Rendering-Provider sind geplant und befinden sich noch in der Imlpementierungsphase.

      Unter anderem bietet das Framework außerdem die aus XNA bekannten SpriteFonts in einem eigenen Format. Mithilfe der SpriteFontGenerator-Klasse können Systemfonts in SpriteFont Instanzen umgewandelt werden, die dann beim Endnutzer geladen werden können um Texte darzustellen, deren Font der Endnutzer nicht installiert hat.

      Screenshot(s):



      Verwendete Programmiersprache und IDE:
      C# (IDE: Visual Studio 2010)

      Systemanforderungen:
      .NET Framework 4.0

      Download:
      XGL 0.1.9

      Lizenz/Weitergabe:
      Open-Source

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Krissel095“ ()

      Also es sieht recht gut aus. Nur mehr kann ich dazu leider noch nicht sagen, da ich keine Ahnung habe wie ich das ganze zum laufen bekomme. Habe mir mal extra den SourceCode geladen, um zu schauen ob ich dahinter komme, aber mir fiel nichts ein.
      Wäre schön, wenn du villeicht ein kleines Beispielprojekt mitgeben könntest.

      Edit:
      Puh, nach etwas längerem rumprobieren habe Ich es jetzt mal zum laufen bekommen. Im Expander ist mal der Code, mit dem ich es zum laufen gebracht habe. Falls ich es besser machen kann, sagt es einfach.

      Spoiler anzeigen

      Der Code bewirkt, das im Fenster Random die Hintergrundfarbe gesetzt wird.

      C-Quellcode

      1. public partial class Form1 : Form
      2. {
      3. public Form1()
      4. {
      5. InitializeComponent();
      6. ComponentManager.Instance.Add(new GameLoop());
      7. var sceneManager = new SceneManager();
      8. sceneManager.Construct();
      9. ComponentManager.Instance.Add(sceneManager);
      10. var scene = new Game();
      11. sceneManager.Add(scene);
      12. var graphicsDevice = new GraphicsDevice(this.Handle);
      13. var graphics = new GDIGraphicsProvider(graphicsDevice);
      14. graphicsDevice.SetDisplayMode(800, 600);
      15. graphicsDevice.Graphics = graphics;
      16. graphicsDevice.Construct();
      17. ComponentManager.Instance.Add(graphicsDevice);
      18. ComponentManager.Get<GameLoop>().Run();
      19. }
      20. }


      Und die Game-Klasse

      C-Quellcode

      1. using Xemio.GameLibrary.Game;
      2. using Xemio.GameLibrary.Rendering;
      3. namespace XGLTest
      4. {
      5. class Game : Scene
      6. {
      7. public override void Initialize()
      8. {
      9. LoadContent();
      10. }
      11. public override void Render()
      12. {
      13. base.Render();
      14. GraphicsDevice.Clear(Color.Random);
      15. }
      16. }
      17. }




      Edit2:
      Mir ist noch was aufgefallen. Das CornflowerBlue ist jetzt nicht wirklich blau, eher ein helles beige.

      MfG Pascal J.
      „Ex-ter-mi-nate all knock-knock jokes! They are an enemy of the daleks “ A Dalek
      Mein Blog zum Thema Klarträumen

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Pascal J.“ ()

      Danke für das Feedback :)
      Ich werden morgen ein kleines Tutorial dazu online stellen, in dem näher erklärt wird, wie XGL eingebunden werden kann. Geplant ist außerdem eine Art Helper-Klasse, die sich um die automatische Initialisierung aller notwendigen Komponenten kümmert, falls man keine spezifischen Komponenten braucht.

      Die neue Version ist online, "CornflowerBlue" sollte jetzt auch die richtigen Farbkomponenten verwenden.

      Ich denke ich werde ab morgen die kleine Tutorialserie anfangen :)

      MfG
      Dann noch eine kleine Frage von mir. Hast du vor später auch SharpDX zu unterstützen?
      Habe zwar noch nicht viel mit den verschiedenen Managed DirectX Wrappern hantiert, aber von den Benchmark tests habe ich gesehen, dass er der schnellste unter denen ist (http://code4k.blogspot.de/2011...). Außerdem glaube ich es ist der einzige Wrapper mit denen man gültige MetroApps erstellen kann, die man auch veröffentlichen kann
      (sharpdx.org/about/features).

      MfG Pascal J.
      „Ex-ter-mi-nate all knock-knock jokes! They are an enemy of the daleks “ A Dalek
      Mein Blog zum Thema Klarträumen
      und ich hab von Titel her gehofft es hat was mit OGL zu tun. evtl. überdenkst du den Namen noch solange es möglich ist damit es keine Namenskonflikte gibt (bei mir mehr Gedankenkonflikte ^^

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Mangafreak1995“ ()

      @Pascal J.
      SharpDX zu unterstützen wäre an sich kein Problem, die Rendering Pipeline ist ja vollständig abstrahiert :) Ich denke nach der Implementierung der aktuell geplanten Renderer kümmer ich mich auch noch um einen OpenGL und SharpDX Renderer.

      Danke übrigens für das Feedback zur Usability, die neue Version bietet eine vereinfachte Initialisierungsmethode und vereinfachte Komponentenverwaltung.

      Ich habe außerdem ein Tutorial in Verbindung mit VB.Net hochgeladen:
      [VB.NET] [Workshop] Spieleprogrammierung mit XGL

      MfG
      Hi,
      ich muss jetzt mal loswerden wie gut ich das hier jetzt schon finde. Wenn man jetzt mal reingefunden hat ist es einfach zu benutzen, trotzdem wäre eine etwas größere Doku schon nicht schlecht, die hast du im Projekt schon relativ rar gesäät. Im Objektbrowser sieht man dazu zum Beispiel fast gar nichts.
      Aber wieder zu was anderem. Habe gerade auf github gesehen das der XnaRenderer implementiert wurde 8o . Hab dann mal schnell bei deinem anderen Projekt auf Basis von XGL (Defend the Princess) ausprobiert was passiert wenn ich den Renderer austausche. Bis auf kleinere Stellen läuft das ganze einfach weiter so wie es soll und funktioniert :D. Laut der Anzeige hatte ich auch ca 1300FPS mehr ^^.

      Wirklich gut gemachte Arbeit :thumbsup:

      MfG Pascal J.
      „Ex-ter-mi-nate all knock-knock jokes! They are an enemy of the daleks “ A Dalek
      Mein Blog zum Thema Klarträumen
      Freut mich, dass du die Arbeit zu schätze weißt :)
      Der Xna Renderer ist für den IRenderManager auch bereits vollständig implementiert, allerdings fehlt noch Support für geometrische Formen, über die momentan unter dem GDI Provider z.B. das User Interface oder Schatten gerendert werden. Da ich allerdings die nächste Tage kaum Zeit zum programmieren habe, wird das vermutlich erst so gegen nächstes Wochenende fertig implementiert sein :)

      Geplant ist außerdem noch eine Soundkomponente, die sich um Soundeffekte und Musik kümmert und verschiedene ISoundProvider zur Verfügung stellt. Eine Dokumentation kommt denke ich ab dem ersten fertigen Release auch noch dazu, der Code ist ja bereits vollständig auskommentiert :)

      MfG
      Hey,

      habe auch mal angefangen mit deiner Library ein kleines Spiel zu schreiben, deshalb habe ich noch ein paar Fragen.

      wie kann ich wie bei deinem Princess Defense einen Font zeichnen?
      Die normale Library(Version 0.1.9) hat leider kein TextureFactory.CreateSpriteFont(@"Resources\fonts\xy.sf") wie im Princess Defense.
      Es scheint aber, dass du das zumindest auf github schon implementiert hast (TextureFactoryExtension).
      Es wäre nett, wenn du das, bevor du erstmal nicht dran arbeitest, einbauen könntest ... :)

      Warum baust du eigentlich die FPS-Anzeige in eine eigene Scene?

      Du könntest ja auch noch eine Standard-TileMap einbauen (wie im Puzzle Platformer und Princess Defense).
      Meiner Meinung nach ein sehr gutes Projekt und du hast einen guten Code-Stil.

      MfG Trudi :)

      EDIT: So, habe jetzt herausgefunden dass man Fonts über SpriteFont.Load laden kann, jetzt stellt sich mir nurnoch das Problem, dass ich nicht weiß wie man *.sf Dateien erstellt.

      Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Trudi“ ()

      Neue Version ist online:

      Changelog:
      • Implemented geometry support
      • Implemented xna renderer for testing purposes
      • Implemented entity management
      • Implemented spritefont extension methods for the ITextureFactory interface
      • Implemented basic collision detection math for spheres and rectangles
      • Implemented component and entity cache for easier component management
      • Implemented logging and exception tracking system
      • Improved code by accepting suggestions from Resharper
      • Fixed texture positioning offsets due to float rounding issues
      • Fixed a key listener issue that occured changing the enumeration


      Download:
      xgl-stable-0.1.10

      @Trudi
      Ich werde demnächst noch einen Spritefont Generator releasen, mit dem man gemütlich Systemfonts in eine *.sf Datei konvertieren kann. Momentan kann man per Code die SpriteFontGenerator-Klasse im Xemio.GameLibrary.Rendering.Fonts.Utility Namespace verwenden, um Fonts zu generieren.

      Die FPS-Anzeige ist in einer eigenen Scene, damit ich einerseits die FPS-Anzeige jederzeit ganz einfach deaktivieren kann, andererseits die Klasse direkt für das nächste Projekt wiederverwendet werden kann :)

      Danke für das Feedback.
      Hey,
      ich finde super, was du da alles einbaust, bin nämlich gestern an den Kollisionen gescheitert (FPS von 260 auf 60 gesunken).

      Ich habe gerade versucht den XNA-Renderer zu benutzen, da tritt aber folgender Fehler auf:

      Quellcode

      1. Eine nicht behandelte Ausnahme des Typs "System.BadImageFormatException" ist in XGL.Xna.dll aufgetreten.
      2. Zusätzliche Informationen: Die Datei oder Assembly "Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553" oder eine Abhängigkeit davon wurde nicht gefunden. Es wurde versucht, eine Datei mit einem falschen Format zu laden.

      C-Quellcode

      1. XGL.Initialize(new XnaGraphicsInitializer());
      2. XGL.Run(this.Handle, 800, 600, 60); // <=== Hier tritt der Fehler auf


      Siehe auch den Screenshot:

      Mein System ist Windows 8 64-Bit.
      Wie man sieht, habe ich mir etwas von deiner Ordnerstruktur und den Dateien abgeschaut, weil es einfach so am übersichtlichsten ist. Ich hoffe du findest das nicht so schlimm, auch wenn das stark nach Copy&Paste aussieht :)

      Wenn du den Spritefont Generator erstellst kannst du auch ganz einfach mit System.Drawing.Text.PrivateFontCollection Custom Fonts einbinden.
      Und in eurem Blog ist alles auf Englisch, nur die Kategorie ist auf Deutsch ("Unkategorisiert").

      MfG,
      Trudi

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trudi“ ()

      @Trudi
      Die PrivateFontCollection könnte man dann aber nur für GDI+ benutzen, die SpriteFonts waren ja dafür gedacht, Schriftarten für jede Renderer-Implementierung zu unterstützen :) Ich bin übrigens gerade dabei, letzte Tests durchzuführen, ich denke morgen wird der SpriteFontGenerator released:



      Um den XNA Renderer zu nutzen musst du das XNA Game Studio 4.0 installiert haben, ansonsten können die Abhängigkeiten des Renderers natürlich nicht gefunden werden.
      Ich hab das mit der PrivateFontCollection geschrieben, weil du zum generieren von SpirteFonts ja GDI nutzt und so braucht man sich nicht die Arbeit machen, Fonts aus dem Internet extra zu installieren :D
      Find ich super, das der Morgen fertig ist, dann muss ich nicht mehr deine Schriftart nutzen.

      Das mit dem XNA ist blöd, da kann ich nicht mehr mit Visual Studio 2012 programmieren (obwohl das XNA Game Studio 4.0 installiert ist).

      MfG Trudi

      Trudi schrieb:

      Das mit dem XNA ist blöd, da kann ich nicht mehr mit Visual Studio 2012 programmieren (obwohl das XNA Game Studio 4.0 installiert ist).


      Warum solltest du das nicht mehr können? Soweit ich weiß, sind doch nur die Projekt Templates in Visual Studio 2012 nicht mehr verfügbar, die Assembly "Microsoft.Xna.Framework.dll" ist doch aber trotzdem eine .NET Assembly, die du als Referenz hinzufügen können solltest, oder nicht?

      MfG
      Nope.

      Visual Studio 2012:


      Visual Studio 2010:


      In Visual Studio 2010 findet er die Assemblys, in 2012 aber nicht (Listen sind alphabetisch geordnet).
      Beide Projekte sind aufs .Net Framework 4.0 eingestellt.

      MfG Trudi
      Meiner Meinung nach sollte das definitiv gehen, der IL-Code Standard hat sich ja nicht geändert. Wie gesagt, probier es einfach mal mit dem "Durchsuchen.."-Button und füg die Referenzen einfach per Hand hinzu, indem du auf "Microsoft.Xna.Framework.dll" bzw. "Microsoft.Xna.Framework.Graphics.dll" referenzierst ;)

      MfG
      Habe mal die "Microsoft.Xna.Framework.dll" und "Microsoft.Xna.Framework.Graphics.dll" aus dem Ordner C:\Program Files (x86)\Microsoft XNA\XNA Game Studio\v4.0\References\Windows\x86 hinzugefügt (wie sie in Visual Studio 2010 verfügbar waren) und es ist immernoch der selbe Fehler. Irgendwas muss sich also geändert haben :)

      Beweis:


      MfG

      EDIT:
      Habe mal meine Suchmaschine angeschmissen und da hat jemand vorgeschlagen die Einstellungen von AnyCPU auf die Architektur der Library zu ändern(in meinem Fall x86), da kommt dann aber ein schwarzer Bildschirm und folgende Exception:

      Quellcode

      1. Eine Ausnahme (erste Chance) des Typs "System.IO.FileNotFoundException" ist in XGL.Xna.dll aufgetreten.


      Komischerweise funktioniert der GDIGraphicsInitializer jetzt auch nicht mehr mit folgender Exception:

      Quellcode

      1. Eine Ausnahme (erste Chance) des Typs "System.InvalidOperationException" ist in XGL.GDIPlus.dll aufgetreten.


      Mit AnyCPU funktioniert es wie es soll:


      Mit x86 nicht:


      Hier scheint das aber geholfen zu haben ...

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Trudi“ ()

      Lass mir am besten mal das ganze Projekt per PM zukommen, dann schaue ich mir das mal an :) So wie es aussieht, könnte das tatsächlich ein Bug in der XGL sein, allerdings weiß ich das erst, wenn ich nähere Informationen zur Exception habe und debuggen kann.

      MfG