Sharpex2D 1.3.0 | 2D Game Framework

    • Beta
    • Open Source

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

      Ich werd hier langsam irre :D

      Quellcode

      1. 'Test.Scenes.MainMenu' implementiert den Schnittstellenmember 'Sharpex2D.Framework.Rendering.Scene.IScene.Render(Sharpex2D.Framework.Rendering.IRenderer, float)' nicht.


      Ich habe die alte Version der DLL gelöscht und habe jetzt definitiv die 0.2.410 drin.
      @thefiloe Wenns so einfach wäre :D
      Das Problem ist ja nicht, dass ich die Methode nicht implementieren kann,
      sondern dass diese Methode so garnicht in der neuen DLL existiert.

      Ich hab aber jetzt endlich das Problem gefunden.

      Die Anweisung, die aktuelle Library aus dem /lib/ Ordner zu laden, hat VS 2013
      gekonnt ignoriert und hat stattdessen (auch nach nem clean und full rebuild) die alte DLL aus dem Debug-Ordner geladen.

      Unglaublich, was da für dumme Fehler passieren und wie viel Zeit man damit verbringt,
      die zu beheben ^^

      Nochmal Vielen Dank für eure Hilfe

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

      Updatenotizen 0.5.840

      - Alle Texturen werden nun über Texture2D geladen, egal welches RenderDevice ihr benutzt
      - Fonts sowie Pen, werden nun über die Klasse Pen und Font erstellt, diesen erstellen automatisch die richtige Resource entsprechend des RenderDevices
      - Die SGL Initialisierung benötigt nun nur noch ein SGL.Initialize(), die Game Klasse wird automatisch über Reflection gefunden, und das Fenster automatisch erstellt sofern keins vorhanden ist
      - Initialisierung des RenderDevices sowie des MediaInitializer geschieht nun in der Methode OnInitialize der Game-Klasse. Zusätzlich gibt es dort nun "LaunchParameters" mit denen ihr auf die Startargumente eurer Applikation zugreifen könnt. Darüber könnte z.B über das RenderDevice entschieden werden.
      - DeviceSelector.Select(RenderDevice[], SelectionMode) sucht nun automatisch ein RenderDevice welches zum System passt. Zusätzlich kann man über den SelectionMode das Auswahlkriterium verändern.
      - Polygone mit Kollisionsberechnung

      Ich denke das war erstmal das wichtigste, natürlich gibt es noch viele kleinere Änderungen, die ihr hier einsehen könnt. (github.com/ThuCommix/Sharpex2D/commits/Sharpex2D-0.5.840) Einen kleinen Einstieg in die neue Version könnt ihr hier finden: Getting started | Sharpex2D 0.5.840

      Desweiteren gibt es noch eine Version die mit Mono kompiliert wurde. Dies wird in Zukunft noch eine wichtige Rolle einnehmen.

      ThuCommix schrieb:

      Desweiteren gibt es noch eine Version die mit Mono kompiliert wurde.


      Wieso muss man die extra kompilieren? Ich dachte, .NET und Mono Assemblies sind Binärkompatibel.
      To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

      At some point in time, you recognize that knowing more does not necessarily make you more happy.
      Hallo,

      ich habe einen kleinen Bug gefunden:
      Wenn man SGL initialisiert und dann nach der Initialisierung die Größe ändert (z.B. auf 1024x768), dann ist nur ein kleiner Teil des Hintergrunds blau und der Rest ist weiß.

      Code:

      C#-Quellcode

      1. # Program.cs
      2. static void Main()
      3. {
      4. SGL.Initialize();
      5. SGL.Components.Get<RenderTarget>().Window.Size = new Sharpex2D.Framework.Math.Vector2(1024, 768);
      6. }
      7. # Game-Klasse
      8. public class MainGame : Game
      9. {
      10. public override void OnUpdate(GameTime gameTime)
      11. {
      12. }
      13. public override void OnRendering(Sharpex2D.Framework.Rendering.Devices.RenderDevice renderer, GameTime gameTime)
      14. {
      15. renderer.Begin();
      16. renderer.End();
      17. }
      18. public override EngineConfiguration OnInitialize(LaunchParameters launchParameters)
      19. {
      20. RenderDevice resultDevice = DeviceSelector.Select(
      21. new RenderDevice[]
      22. {
      23. new Sharpex2D.Framework.Rendering.GDI.GDIRenderDevice()
      24. }, DeviceSelector.SelectorMode.Lowest);
      25. MediaInitializer mediaInitializer = MediaInitializer.Empty;
      26. return new EngineConfiguration(resultDevice, mediaInitializer);
      27. }
      28. public override void OnLoadContent()
      29. {
      30. }
      31. }


      Bild:


      MFG
      Alex-Digital :D

      EDIT:
      PS: Könntest du die DLL auf NuGet updaten? Danke. :D
      ~ Alex-Digital :D

      if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D
      @Alex-Digital versuch mal SGL.RenderDevice.Bacckbuffer.Width/.Height zu setzen statt die Window Size.

      @Cross Nein, war in einer früheren Version mal implementiert, ist aber rausgeflogen. Alter Source (für den GdiRenderer) hier.

      Pinki schrieb:

      Und wieso das ganze Projekt, inklusive Dateien, kopieren so dass alles doppelt drin ist? Dafür könnte man auch #if oder einen Runtime-Check nutzen, so hast du dann nur ein Projekt das für Windows & Mono verwendet werden kann.


      Du hast recht, das werde ich im nächsten größeren Update ändern. Wenn ich zb #If WINDOWS habe, wird dieser Code auf Mono nicht kompiliert oder? (Vorrausgesetzt ich habe das Mono Symbol gesetzt)

      Andy16823 schrieb:

      Ist eigendlich geplannt, das du auch 3D unterstüzen wirst, in naher oder ferner zukunft.


      Nein, vielleicht in Sharpex3D.

      Alex-Digital schrieb:

      Hallo,

      ich habe einen kleinen Bug gefunden:
      Wenn man SGL initialisiert und dann nach der Initialisierung die Größe ändert (z.B. auf 1024x768), dann ist nur ein kleiner Teil des Hintergrunds blau und der Rest ist weiß.


      Ich habe den Fehler behoben: github.com/ThuCommix/Sharpex2D…45263428d7de5d53ffe377cbe Dennoch musst du Scaling im GraphicsDevice aktivieren oder du nutzt den SGLInitializer für die Methode SGL.Initialize() dort kannst du direkt deine Größe als Eigenschaft angeben. Die neueste Version findest du in der Master Branch der Git.

      Cross schrieb:

      @creac: Okay, alles klar, aber weswegen? :O


      Eventuell wird es im nächsten Update wieder drin sein.
      Update 0.6.200

      - Der Namespace Sound wurde zu Audio umbenannt
      - Video support wurde entfernt, weswegen auch der MediaInitializer weggefallen ist. Es wird direkt der ISoundInitializer verwendet
      - Aus Audio wurde Wave entfernt, da diese API den Anforderungen nicht gerecht werden konnte
      - Implementierung von WaveOut
      -> Dadurch sind nun multiple Sounds gleichzeitig möglich, ohne das sie sich abwürgen (SoundEffect.Play)
      - Die Klasse Sound hat nun neben den ResourcePath auch eine Eigenschaft Data, in der die Bytes der Datei stehen.
      - CopyrightAttribute wurde entfernt, stattdessen steht das Copyright am Anfang der Datei.
      - SGLInitializer wurde gegen Configurator ausgetauscht, der von IConfigurator erbt. Dadurch könnte ihr eigene fixe Configs erstellen
      - SpriteSheet support
      - AnimatedSpriteSheet welches von SpriteSheet erbt, und automatisch vordefinierte Keyframes ausführen kann.

      C#-Quellcode

      1. _animation = new AnimatedSpriteSheet(Content.Load<Texture2D>("image.png"));
      2. _animation .Add(new Keyframe(new Rectangle(0, 0, 74, 96), 150));
      3. _animation .Add(new Keyframe(new Rectangle(73, 0, 74, 96), 150));
      4. _animation .Add(new Keyframe(new Rectangle(146, 0, 74, 96), 150));
      5. _animation .Add(new Keyframe(new Rectangle(219, 0, 74, 96), 150));


      Der erste Parameter definiert das anzuzeigende Rechteck, und der zweite die Duration in milliseconds. Desweiteren müsst ihr die AutoUpdate Eigenschaft auf true stellen und das AnimationSpriteSheet in der Update- Methode updaten.

      - Bei DrawTexture ist die Color nun optional.
      - ContentStorage wurde entfernt
      - Der GameLoop kann nun zwischen den Frames Idlen falls gewünscht. Die Zeitspanne ist festlegbar.
      - Wenn das Spiel minimiert wird, wird das Spiel automatisch in den Idle Modus versetzt was Ressourcen spart. Diese verhalten kann geändert werden indem man OnActivation und OnDeactivation in der Game - Klasse überschreibt.
      - Logsystem wurde überarbeitet und ähnelt nun zTrace (github.com/ThuCommix/zTrace)
      [DirectX10] - Es wurde ein Fehler behoben, wobei die Texturen mit einen falschen DPI wert erstellt wurden
      [Sharpex2D.CSCore] - WaveOut wurde entfernt, da dieser in Sharpex2D bereits existiert.


      Sharpex2D 0.6.200
      Wenn ich das sehe:
      sharpex2d.de/?p=components
      ...dann sieht mir das doch nach nem idealen Anwendungsfall für NuGet aus.
      Bei den Komponenten, die SharpDX brauch, kannst du das auch gleich als Abhängigkeit hinzufügen, das gibt's da auch:
      nuget.org/packages/SharpDX/
      CSCore ist auch schon da: nuget.org/packages/CSCore/

      Ich sehe da zwar schon ein Sharpex-Package, aber ist das auch aktuell und hat die Abhängigkeiten korrekt gesetzt? Auf der Komponenten-Seite se ich auch mehr als das, was bei NuGet steht.

      Außerdem sehe ich Sharpex 2x da?
      nuget.org/profiles/ThuCommix/

      Edit: Gibt's auch irgendwo ne Demo von der Physik-Engine?
      Kann die Engine auch was in Richtung Lichteffekte/Beleuchtung? Ich dachte da an Punktlichtquellen und kegelförmigen Quellen, die beide einen Scharte werfen können. So könnte man super einen Fog-Of-War-Effekt machen. Oder nen 2D-Gruselspiel mit Taschenlampe.

      Edit2:
      Als Beispiel:
      Ich möchte mehrere texturierte Bälle mit unterschiedlichem Bounce-Faktor im Fenster bouncen lassen. Ein paar Rectangles sollten da auch noch sein, damit das nicht so langweilig ist. Die Bälle sollten sich mit der Maus "fangen" und "werfen" lassen (je nachdem wie schnell die Maus sich bewegt hat).

      Edit3:
      Ich finde die Namespaces auch leicht übertrieben. Beispielsweise hat die GameRandom-Klasse extra einen Namespace für Random. Dabei steht sie alleine in dem Namespace. Die könnte IMO auch einfach im Namespace darüber sein.
      Das macht's übrigens auch schwerer, die Namespace-Guidelines einzuhalten.
      msdn.microsoft.com/en-us/library/893ke618(v=vs.71).aspx
      Demnach dürfen Klassen nicht von anderen Klassen abhängig sein, die sich in einem genesteten Namespace befinden. Siehe das Beispiel aus der MSDN-Seite mit System.Web.
      Von meinem iPhone gesendet

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

      Ich habe mal die alten Pakete auf ungelistet gestellt. Ich habe von der Nuget Sache nicht so viel Ahnung, auch nicht wie ich korrekt Referenzen zum Paket hinzufüge.. Kannst du mir da vielleicht helfen? @nikeee13

      Ich kann dir dann eine Demo fertig machen, ich muss aber dazu sagen, das die Physikengine sehr basic ist. Eventuell musst du da selbst noch abändern, oder deinen eigenen PhysicProvider schreiben. Ich schick dir dann eine PN mit dem Grundgerüst.

      Ich wollte generell die Namespaces ein bisschen abändern, ziemlich viel aus den common ns soll einfach nach Sharpex2D.Framework, eventuell lasse ich auch das Framework weg. Hast du Vorschläge wie ich das am besten alles umgestallten soll?
      Mehr konkrete Vorschläge habe ich nicht, dafür müsste ich mich mal genauer in den Code einarbeiten.

      Ich sehe gerade, dass man auch mit XBox-Controllern programmeiren kann. Gibt's dazu acuh ne Demo? Habe zu Hause einen und wollte schon immer mal etwas damit rumspielen (pun intended).

      Edit:
      Ich kenne mich mit Physik nicht wirklich aus. Du hast bestimmt schon mal von Farsser gehört:
      farseerphysics.codeplex.com
      Das sieht an sich nicht verkehrt aus, funktioniert aber glaube ich nur mit XNA bzw. MonoGame. Vielleicht kann man da (designtechnisch) was von abschauen?
      Von meinem iPhone gesendet

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

      Okay, ich werde dann mal gucken wegen den Namespaces.



      Von Farseer habe ich noch nichts gehört, werde mir das aber mal anschauen. Auf meiner ToDo Liste steht eh ein kompletter rework der Physik Engine - Mal sehen was sich da machen lässt.
      Bilder
      • xbox.png

        21,13 kB, 235×843, 77 mal angesehen

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

      Ich versuche gerade mal etwas damit rumzuspielen. Das Tutorial scheint aber nicht Up-To-Date zu sein:
      Getting started | Sharpex2D 0.5.840
      Den MediaInitializer gibt es nicht. Habe deshalb den DirectSoundInitializer verwendet.

      Ich habe SharpDX via NuGet als Abhängigkeit installiert, aber deine Library scheint speziell 2.5.0 zu brauchen.

      Zu den Komponenten habe ich eine Frage:
      sharpex2d.de/?p=components
      Was ist der Unterschied zwischen einem *Renderer und *RenderDevice? Brauche ich beides? Wenn ja, warum separat downloaden? Wenn nein, welches davon macht was?

      Es wäe echt super, wenn die 3 Komponenten via NuGet installiert werden könnten.
      Von meinem iPhone gesendet