Sharpex2D 1.3.0 | 2D Game Framework

    • Beta
    • Open Source

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

      Mit dieser Version bekommen wir nun folgenden Fehler (siehe Anhang):


      Mit der anderen Version die vorhin lief und die wir über Deinen "Fixed Inputhandler"-Link vom Freitag geladen hatten, lief der InputHandler nicht. Bzw. er lief schon, allerdings genauso wie vorher, d.h. 2 verschiedene Spieler konnten ihre Pong-Schläger immer noch nicht gleichzeitig bewegen.

      Gruß,
      Dennis
      Bilder
      • Exception.PNG

        22,27 kB, 449×309, 141 mal angesehen
      Wann kommt der Fehler? - Initialisiert ihr eure Klassen im OnInitialize oder woanders?


      Der InputManager hängt nun direkt an der WinApi, es scheint aber so, dass wenn man eine Taste gedrückt hält, und eine andere Taste drückt, nur noch die zweite registriert wird. Der Fehler liegt nicht bei mir sondern an der WinApi. Ich werde mir was überlegen müssen wie ich das ändern kann..
      Okay, das mit dem Fehler hat sich jetzt erledigt, dummer Fehler meinerseits. :D

      Das mit der WinAPI ist natürlich ärgerlich, für mich allerdings auch nicht soo schlimm, da wir später sowieso den LeapMotionController als Input nutzen wollen.

      Hast Du Dir mal angeschaut, wie man diesen kleinen Delay beim gedrückthalten einer Taste loswerden kann?


      Edit:
      Wir haben jetzt das Problem, dass uns nach einiger Zeit eine CalledOnDelegate Exception geworfen wird. Anscheinend liegts am InputHandler.

      Kurze Problembeschreibung: Wir starten Pong und lassen es länger laufen (30-60 Sekunden). Sobald nun eine Taste gedrückt wird um die Schläger zu bewegen, bekommen wir diese Exception.

      Außerdem läuft das Rendering auch nicht wirklich "flüssig". Kann natürich auch an dem GDI Renderer liegen, aber wir haben das Gefühl, dass die Animation immer unflüssiger wird wenn das Spiel länger läuft. Ich kann Dir den Quelltext auch gern mal schicken, ist nicht "wirklich" lang, deine Engine hält ja alles ziemlich kurz.

      Unsere move-Methode der Entities sieht folgendermaßen aus:

      Quellcode

      1. public virtual void move(double delta)
      2. {
      3. Position.X += (float)(delta * dx) / 1000;
      4. Position.Y += (float)(delta * dy) / 1000;
      5. }


      delta ist die vergangene Zeit seit dem letzten Frame.

      Gruß,
      Dennis
      Bilder
      • CallbackOnCollectedDelegate.PNG

        16,53 kB, 547×302, 121 mal angesehen

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

      Den Fehler für das Delay konnte ich finden, ich häng die DLL mal hier an. Ich habe auch gleichzeitig versucht die Exception zu verhindern ich weiß allerdings nicht ob das funktioniert hat, da der Fehler bei mir noch nie aufgetreten ist.

      Ich weiß nicht wie viele Elemente ihr zeichnet, aber eigentlich gibt GDI nicht ganz so schnell auf. Könntet ihr mir mal euer Projekt senden (Private PN) da kann ich mal schauen was da schief gehen könnte.
      Dateien
      Der Fix funktioniert, danke dafür.
      Ob der Crash noch auftritt teste ich nachdem ich Dir das Projekt per PN geschickt habe.

      Dauert eine Sekunde.

      Edit: Der Crash tritt immer noch auf.

      Gruß,
      Dennis

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

      Laut elapsed läuft das Spiel zu jeder Zeit mit 16,6ms (60FPS) ohne Frame drops. Das leichte springen des Balls sind Rundungsfehler von double und float. Eventuell kannst du ja Integer verwenden, da würde das Problem nicht auftauchen.

      Wegen der Exception schreib ich dir nochmal eine PN.
      Aktualisierung auf Version 0.1.549

      Changelog:

      github.com/ThuCommix/Sharpex.G…eLibrary-0.1.549?expand=1


      Neues im Überblick:

      - Komplett überarbeitetes Inputsystem mit der Möglichkeit eigene Devices hinzuzufügen
      - Entity system
      - Überprüfung ob das RenderTarget noch verfügbar ist, wenn nicht -> Shutdown
      - Fixed Keyboard input delay
      - Ändern des Standard Keyboards (Maus wird noch folgen)
      - Keyboard basiert nicht mehr auf WinApi (GC entfernt auf manchen System die delegaten)


      Die neueste Version bekommt ihr entweder über NuGet oder hier Sharpex.GameLibrary 0.1.549
      Hallo,

      ich habe mich davon überzeugt, deine Engine für mein erstes Game zu benutzen.

      Darum wollte ich es erstmal initalisieren, aber es gibt einen Fehler:

      Fehlerliste ^^ schrieb:

      "SharpexGL.SGLInitalizer enthält keinen Konstruktor, der 1-Argumente akzeptiert.


      Ich habe das TestGame von deinem Tutorial genommen und den Code so übernommen.

      Das zweite Argument soll ein IntPtr sein.
      Was muss ich dort benutzen bzw. wo kann ich das Handle der Form holen?

      Hoffe, dass jemand mir helfen kann.

      MFG

      Alex-Digital :D
      ~ Alex-Digital :D

      if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D
      Aktualisierung auf Version 0.1.619

      Changelog:

      github.com/ThuCommix/Sharpex.G…arpex.GameLibrary-0.1.619


      Neues im Überblick:

      - Ändern des standard Maus devices
      - ContentVerifier zum überprüfen, ob die Contentfiles manipuliert wurden
      - SceneManager muss manuell in der Game Klasse geupdated und gezeichnet werden
      - Neues Fontsystem mit Typefont. (Jeder Renderer benötigt seine eigene Font klasse, z.B: GdiFont, DirectXFont)
      - Textursystem nun abstrakt, jeder Renderer benötigt seine eigene Texturklasse (GdiTexture, DirectXTexture usw)
      - Für Geometrien wird nun ein IPen benötigt. Dieser Pen benötigt den selben Typ wie der Renderer (GdiPen, DirectXPen)
      - Für DrawText wird nun ein Rectangle benötigt, in dem der Text dargestellt wird


      Weiteres

      Für Sharpex.GameLibrary ist nun ein weiterer Renderer verfügbar. DirectXRenderer
      DirectXRenderer basiert auf SharpDX und ist ab sofort über NuGet oder in der git verfügbar.



      Es müssen nur noch kleinere Dinge wie VSync erledigt werden.
      Dankeschön für das Lob.


      Ich habe mir mal erlaubt für die externen Komponenten eine eigene git zu erstellen, da sie ja unabhängig von der Engine existieren.

      DirectSoundProvider 0.5.439 danke an @thefiloe:

      DirectXRenderer 0.1.126


      Der DirectXRenderer unterstützt nun Vsync, sowie Resizing des RenderingArea.

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

      Moin,

      ich habe gerade den DirectXRenderer ausprobiert, allerdings fliegt eine MissingMethodException:
      Spoiler anzeigen

      Quellcode

      1. System.MissingMethodException was unhandled
      2. HResult=-2146233069
      3. Message=Methode nicht gefunden: "Single SharpexGL.Framework.Rendering.GraphicsDevice.get_RefreshRate()".
      4. Source=DirectXRenderer
      5. StackTrace:
      6. bei SharpexGL.Framework.Rendering.DirectX.DirectXRenderer.Construct()
      7. bei SharpexGL.Framework.Components.ComponentManager.Construct()
      8. bei SharpexGL.SGL.Run(IRenderer graphicRenderer, ISoundInitializer soundInitializer)
      9. bei SharpexTest.Entry.Main(String[] args) in C:\Users\Tim Schiewe\documents\visual studio 2010\Projects\SharpexTest\SharpexTest\Entry.cs:Zeile 27.
      10. bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
      11. bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
      12. bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
      13. bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
      14. bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
      15. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
      16. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
      17. bei System.Threading.ThreadHelper.ThreadStart()
      18. InnerException:



      Verwendeter Code:

      C-Quellcode

      1. static void Main(string[] args)
      2. {
      3. MyGame game = new MyGame();
      4. frmRender form = new frmRender();
      5. var sglInit = new SGLInitializer(game, form.Handle);
      6. sglInit.Width = 800;
      7. sglInit.Height = 600;
      8. SGL.Initialize(sglInit);
      9. SGL.Run(new DirectXRenderer(), null);
      10. Application.Run(form);
      11. }


      Verwendete Versionen:
      • Sharpex.GameLibrary 0.1.619
      • DirectXRenderer 0.1.126
      Mit dem GdiRenderer funktioniert alles prächtig.

      Ansonsten: Geniales Projekt! Weiter so!
      Mit freundlichen Grüßen,
      Thunderbolt
      Jetzt scheint der Renderer zu initialisieren. Allerdings schmeißt SharpDX jetzt eine Exception:
      Spoiler anzeigen

      Quellcode

      1. SharpDX.SharpDXException was unhandled
      2. HResult=-2147467262
      3. Message=HRESULT: [0x80004002], Module: [General], ApiCode: [E_NOINTERFACE/No such interface supported], Message: Schnittstelle nicht unterstützt
      4. Source=SharpDX
      5. StackTrace:
      6. bei SharpDX.Result.CheckError()
      7. bei SharpDX.Direct2D1.Factory.CreateDxgiSurfaceRenderTarget(Surface dxgiSurface, RenderTargetProperties& renderTargetProperties, RenderTarget renderTarget)
      8. bei SharpDX.Direct2D1.RenderTarget..ctor(Factory factory, Surface dxgiSurface, RenderTargetProperties properties)
      9. bei SharpexGL.Framework.Rendering.DirectX.DirectXRenderer.Construct()
      10. bei SharpexGL.Framework.Components.ComponentManager.Construct()
      11. bei SharpexGL.SGL.Run(IRenderer graphicRenderer, ISoundInitializer soundInitializer)
      12. bei SharpexTest.Entry.Main(String[] args) in C:\Users\Tim Schiewe\documents\visual studio 2010\Projects\SharpexTest\SharpexTest\Entry.cs:Zeile 27.
      13. bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
      14. bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
      15. bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
      16. bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
      17. bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
      18. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
      19. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
      20. bei System.Threading.ThreadHelper.ThreadStart()
      21. InnerException:

      Mit freundlichen Grüßen,
      Thunderbolt