Sharpex2D 1.3.0 | 2D Game Framework

    • Beta
    • Open Source

    Es gibt 388 Antworten in diesem Thema. Der letzte Beitrag () ist von 3Angle.

      Jou.
      Die Datei oder Assembly "Sharpex2D.Rendering.DirectX9, Version=1.2.300.0, Culture=neutral, PublicKeyToken=null" oder eine Abhängigkeit davon wurde nicht gefunden. Es wurde versucht, eine Datei mit einem falschen Format zu laden.
      KaskadekingDE on GitHub :)
      Bitte keine Fragen über Programmierung per PN! Dafür ist das Forum hier.

      Who cares? ¯\_(ツ)_/¯
      Ich würde dir empfehlen DirectX10 oder höher zu verwenden, da dort SharpDX verwendet wird und die Assemblies anyCPU sind. Andernfalls könntest du natürlich dein Projekt für 32Bit kompilieren, welches dann trotzdem auf 64Bit läuft. In Sharpex2D 2.x.x wird es dieses Problem dann nicht mehr geben, da ich für DirectX nur noch SharpDX verwenden will. Wann Sharpex2D 2.x.x kommt steht natürlich im Kaffeesatz meiner Tasse.

      ThuCommix schrieb:


      Genau das hab ich installiert, dann dazu noch alle Komponenten von deiner Website (DX9-DX11) per NuGet und kein DX Renderer funktioniert.
      Fehlermeldung aus meinem letzten Post. Nur der GDI Renderer funktioniert.

      Edit: Übrigens, wenn ich die Größe des Fensters so ändere:

      C#-Quellcode

      1. ​SGL.Components.Get<RenderTarget>().Window.Size = new Vector2(1680, 768);

      ist, zumindest bei GDI (DX konnte ich ja noch nicht testen), die Renderfläche noch so groß wie das Fenster von Anfang war. Wie behebe ich das?

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

      Hab mich jetzt schon bissl eingearbeitet, aber nur in Scenes.
      Nochmal ne Frage zum rotieren von Texturen. Hier läuft das ja ganz anders ab als in Vortex2D nämlich wahrscheinlich so, dass man nun wirklich multiplizieren muss.
      Aber ich bin mir nicht im Klaren, wie ich die Texturen jetzt jeweils einzeln transformieren kann. Was ich bis jetzt gefunden habe ist, das der Renderer eine Methode hat die sich SetTransform() nennt. Damit transformiert man aber dann doch den kompletten Viewport. Also alle Bilder/Shapes die gerade gezeichnet werden. Wie kann ich das denn jetzt auf einzelne Texturen anwenden?

      Gonger96 schrieb:

      Kenne die Lib nicht, aber setz' doch den Transform und nach dem Zeichnen der Textur setzte ihn wieder zurück.

      Ja, das hab ich gerade probiert, scheint auch in etwas zu klappen.
      In etwa so:

      C#-Quellcode

      1. ​renderer.DrawTexture(mainMenuBackground, new Rectangle(0, 0, 640, 480));
      2. renderer.SetTransform(Matrix2x3.Rotation(MathHelper.ToRadians(45f)));
      3. UIManager.Render(renderer, gameTime);
      4. renderer.SetTransform(Matrix2x3.Identity);

      Es passiert auch was, das UIElement was ich zeichne ist ein bisschen gedreht, allerdings hat sich auch die Position verändert.
      Liegt das eventuell daran, dass ich die Position der Textur auch mit der Matrix Translatieren muss und nicht einfach die Position bei DrawTexture angeben muss?
      Was genau funktioniert bei den DX Renderern nicht? Wenn du Sharpex2D (1.3.0) über nuget einbindest und dazu einen DX Renderer deiner Wahl dürfte es da keine Probleme geben. (Natürlich muss DirectX bei dir installiert sein).

      EDIT: Ich habe dein Bild nicht gesehen, ich weiß was der Fehler ist. Um DirectX zu realisieren habe ich in der Version 1.3 SlimDX verwendet, welches aber kein AnyCPU anbietet. Probier mal dein Projekt für 32Bit zu kompilieren, dann sollte es funktionieren. In der nächsten Version werde ich auch SharpDX verwenden, welches AnyCPU anbietet, damit wäre das Problem in Zukunft also auch gelöst.

      Wird die Engine eigentlich weiterentwickelt bzw. aktuell gehalten und gibst du dafür auch Support?


      Ja natürlich, aktuell arbeite ich an der Version 2.x.x zu finden hier: github.com/ThuCommix/Sharpex2D/tree/api-2-working
      Der Source ist kompilierfähig, wenn du also schon mal die neue Version testen willst, dann dort die .dll holen und ggbf. noch den DirectX Renderer. Viele Punkte die du in deiner PN angesprochen hast wurden dort bereits verbessert aber noch nicht veröffentlicht.

      1. Mein aktuelles Problem besteht darin den Rotationspunkt einer Textur festzulegen. Ich würde diesen gerne zentrieren, Standardmäßig ist dieser oben links. Wie funktioniert das?


      Momentan kann man das nicht ändern, in der nächsten Version wird das aber über Shader möglich sein.

      2. Der InputManager vom Keyboard verhält sich wie bei einer Windows Textbox, dass man wenn man gedrückt hält ein Buchstabe geschrieben wird, dann eine Sekunde stopp und dann immer weiter. Wie kann man diese Pause dazwischen wegmachen?


      Da kann ich dir nur die neue Version ans Herz legen, da ist dieser Fehler nicht mehr vorhanden.

      3. Renderer.SetTransform ist die Methode um Transformationen anzuwenden. Geht das noch auf eine andere Weise ? Wenn nein, muss man also darauf achten, das zwischen dem gesetzten Transform und dem SetTransform(Matrix2x3.Identity) nur das gezeichnet wird was auch transformiert werden soll richtig?


      Richtig. Wie oben bereits erwähnt wird das später auch über Shader möglich sein, den du beim Draw Call übergeben kannst.

      Ja, das hab ich gerade probiert, scheint auch in etwas zu klappen.


      Richtig, du könntest auch ResetTransform() aufrufen, kommt aber aufs gleiche hinaus, nur das es für dich kürzer wär.

      Es passiert auch was, das UIElement was ich zeichne ist ein bisschen gedreht, allerdings hat sich auch die Position verändert.
      Liegt das eventuell daran, dass ich die Position der Textur auch mit der Matrix Translatieren muss und nicht einfach die Position bei DrawTexture angeben muss?


      Genau so funktioniert es.

      Bevor du jetzt aber mit 2.x.x los legst - dazu gibt es noch keine Doku und keine Beispiele. Ich habe allerdings eine VS Extension entwickelt die dir bereits ein paar Templates bereit stellt. Kann ich gerne heute Abend mal hier anhängen.

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ThuCommix“ ()

      Stimmt, wenn du dir den Source der Game Klasse ansiehst, dürftest du es eigentlich hinbekommen erstmal was zum laufen zu bringen. Wenn nicht, einfach nach fragen :). In der neuen Version befindet sich auch OpenGL 3.3 (Kompromis Neu VS Kompatiblität zu älterer Hardware sonst wäre es noch neuer geworden).

      ThuCommix schrieb:

      Stimmt, wenn du dir den Source der Game Klasse ansiehst, dürftest du es eigentlich hinbekommen erstmal was zum laufen zu bringen. Wenn nicht, einfach nach fragen :). In der neuen Version befindet sich auch OpenGL 3.3 (Kompromis Neu VS Kompatiblität zu älterer Hardware sonst wäre es noch neuer geworden).

      Alles klar, dann leg ich jetzt gleich mal los.
      Finde das einfach genial das alle Renderer auf die selbe Weise funktionieren. Gute Arbeit.

      ThuCommix schrieb:

      Sharpex2D (1.3.0) über nuget
      Bei mir ist das maximale 1.2.3 was ich über NuGet einbinden kann.

      Edit²: Komme mit dem OnInitialize bei 1.3.0 nicht mehr klar. Der EngineConfiguration Konstruktor verlangt einen GraphicsManager welcher allerdings abstrakt ist? Höh?

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

      Hups mein Fehler, gibt nur 1.2.3 die meine ich. :D.

      Komme mit dem OnInitialize bei 1.3.0 nicht mehr klar


      Meinst du 2.x.x?

      Edit: Hast du jetzt 1.3.0 aus der Repo genommen? Dann lieber gleich die Api-2-working, das ist das neueste und ist WIP.

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

      ThuCommix schrieb:

      Hast du jetzt 1.3.0 aus der Repo genommen? Dann lieber gleich die Api-2-working, das ist das neueste und ist WIP.

      Hatte 1.3.0 auf Codeplex gefunden. Komme da aber wie gesagt mit dem GraphicsManager und OnInitialize nich klar.
      Versuche jetzt weiter mal die Api-2-working zu compilen. Hatte eben schonmal probiert aber irgendne pfx Datei war nicht gefunden worden oder so. Und ne SLN is auch nicht dabei, nur ein CSProj. der Sharpex2D. Die renderer aber nich.


      Edit: Ok, habe die Signierung solang entfernt und jetzt klappt das compilen. Renderer ist jetzt egal welchen ich nehme oder? Kann ich DX11 von NuGet beziehen?
      Edit²: Outsch, da ist ja jetzt alles anders.

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Yothrii“ ()

      Zu Erklärung, GraphicsManager ist abstrakt und wird von den Renderern überschrieben, das heißt du benutzt es dann in etwa so:
      GraphicsManager = new OpenGLGraphicsManager()

      Das leidige Thema mit der Schlüsseldatei.. werde den bald aus der sln entfernen. Lösch einfach mal die pfx Datei wenn du das Projekt geladen hast.

      ThuCommix schrieb:

      Kein Problem - ich denke du suchst SGL.Components.Get oder? Ist jetzt in deiner Game Klasse über .Get verfügbar.

      Jo, dankeschön. Das hat mir gefehlt. Was ist eig. mit Grafikeinstellungen wie Antialiasing. Hab irgendwo gelesen das man das vorher beim Initializiseren des Renderers angeben konnte. Jetzt aber nicht mehr?!


      Hab jetzt alles erstmal einfach so gemacht:
      Program.cs:

      C#-Quellcode

      1. new MainGame().Run();


      MainGame.cs : Game
      --> OnOnitialize() -> base.GraphicsManager = new OpenGLGraphicsManager();

      Und dann lief es.

      Andere Frage, Controls macht man sich ja selber und erbt von UIControl.
      Wie sieht das allerdings mit Textboxen aus? Ich meine das zeichnen ist nicht das Problem aber der Input in die Textbox?

      Yothrii schrieb:

      Was ist eig. mit Grafikeinstellungen wie Antialiasing. Hab irgendwo gelesen das man das vorher beim Initializiseren des Renderers angeben konnte. Jetzt aber nicht mehr?!


      Jap, wird aber wieder kommen, ist aber im 2D Bereich von geringerer Bedeutung.

      Yothrii schrieb:

      Hab jetzt alles erstmal einfach so gemacht:
      Program.cs:


      Richtig, du könntest die statische Main Methode auch in deine Game Klasse kopieren, da brauchst du die Program.cs nicht mehr.

      --> OnOnitialize() -> base.GraphicsManager = new OpenGLGraphicsManager();


      Hier ist die Standardinitialisierung wenn du OnInitialize nicht angibst: github.com/ThuCommix/Sharpex2D…ng/Sharpex2D/Game.cs#L186

      Solang du erstmal keinen anderen GraphicsManager benutzen willst, kannst du deine Überschreibung weg lassen.


      Andere Frage, Controls macht man sich ja selber und erbt von UIControl.
      Wie sieht das allerdings mit Textboxen aus? Ich meine das zeichnen ist nicht das Problem aber der Input in die Textbox?


      Es gibt Methoden im Control um den Input abzufragen:

      github.com/ThuCommix/Sharpex2D…ex2D/UI/UIControl.cs#L311

      Die Controls stehen aber auf der Liste von dingen die überarbeitet werden müssen. Wie du siehst ist da momentan nur Maus und Tastatur verfügbar, obwohl die Engine auch Joysticks, Touch und Gamepads unterstützt.

      ThuCommix schrieb:

      Richtig, du könntest die statische Main Methode auch in deine Game Klasse kopieren, da brauchst du die Program.cs nicht mehr.

      Okey, das find ich gut.
      Hat jetzt nichts damit zu tun aber was noch nicht klappt ist das laden einer Textur. Er wirft mir folgenden Error:

      Mein Code sieht derzeitig so aus:

      Es liegt an der Zeile in OnLoadContent.

      ThuCommix schrieb:

      Es gibt Methoden im Control um den Input abzufragen

      Aber die Methode verlangt doch einen Key, das ist für eine Textbox Eingabe aber eher schlecht weil da ja jeder beliebige Buchstabe eingegeben werden kann/soll. Muss man die dann alle durchloopen? xD
      Habe jetzt nicht alles gelesen, aber sieht mir nach 2.0.0 aus. Da geht das dann über ".xcf"-Dateien und den PostCompiler. Das ist recht angenehm für die Verwendung.

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: