Getting started | Sharpex2D 1.2.3

    • C#
    • .NET (FX) 4.0

    Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von Radinator.

      C#-Quellcode

      1. using System;
      2. using Sharpex2D;
      3. using Sharpex2D.GameService;
      4. using Sharpex2D.Rendering;
      5. using Teraxia.Classes.UI;
      6. using Sharpex2D.Math;
      7. namespace Teraxia
      8. {
      9. class Main : Game
      10. {
      11. private Texture2D _texture;
      12. public override EngineConfiguration OnInitialize(LaunchParameters launchParameters)
      13. {
      14. RenderDevice resultDevice = DeviceSelector.Select(new RenderDevice[]
      15. {
      16. new Sharpex2D.Rendering.DirectX11.DirectXRenderDevice()
      17. }, DeviceSelector.SelectorMode.Highest);
      18. return new EngineConfiguration(resultDevice, new Sharpex2D.Audio.Wasapi.WasapiSoundInitializer().CreateProvider().SoundInitializer);
      19. }
      20. public override void OnLoadContent()
      21. {
      22. this._texture = Content.Load<Texture2D>("test.png");
      23. }
      24. public override void OnRendering(RenderDevice renderer, GameTime gameTime)
      25. {
      26. base.OnRendering(renderer, gameTime);
      27. renderer.Begin();
      28. renderer.DrawTexture(_texture, new Vector2(0, 0), Color.White);
      29. renderer.End();
      30. }
      31. }
      32. }
      Wie funktioniert das mit dem Input Manager genau.
      Ich kann mir die Instanz mit dem SGL.Components.Get<InputManager>() holen.
      mit inputManager.GetState() hab ich dann ein state und kann IsKeyDown abrufen. Aber das verhält sich wie in jeder Textbox bei windows.
      Wenn man gedrückt hält, wird ein Buchstabe geschrieben, dann 1 Sekunde pause und dann immer weiter. So ähnlich verhält sich das. Wie kann man das ausschalten?

      Edit: Hat sich erledigt. LOL, hab ThuCommix schon per PN deswegen kontaktiert.

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

      Hi @ThuCommix!

      Hab grad deine Lib noch mal ausgepackt, wollte ein spiel Nachschreiben ;D

      Nur bin ich jetzt auf ein Problem gestoßen: In deinem Tutorial gibst du an mit einem DeviceSelector aus einem RenderDevices Array ein RenderDevice auszuwählen. Dabei erstellst du wie gesagt ein Array aus Klassen, die von RenderDevice erben(in dem Tut sind das DirectX9, DirectX10, DirectX11 und DirectX12 aus dem Namespace Sharpex2D.Rendering) Nur sind in der aktuellen Version keine derartigen Klassen da vorzufinden. Was mach ich falsch? Oder besser gesagt: Wie macht man des jetzt?

      Bin grad drauf gekommen, dass ich von NuGet geklont hab, dass schon uralt war. Hatte zwischendurch ne neuer Version(github.com/ThuCommix/Sharpex2D/tree/master) da war dann aber auch was falsch. Mittlerweile arbeite ich mir der Version 1.3.0(github.com/ThuCommix/Sharpex2D/tree/Sharpex2D-1.3.0), doch die hat iwie auch nen Fehler:
      Wenn ich ein neues Projekt erstelle, dann mit SGL.Initialize() die Engine starte und dann in meiner Game-Klasse per Linq-Extension in einer List, die alle GraphicsManager enthält, nach dem ersten Unterstützen Manager suche, dann kommt eine Exception daher:

      Spoiler anzeigen

      Program.cs:

      C#-Quellcode

      1. using Sharpex2D;
      2. using System;
      3. namespace Sharpex2dTestGame1
      4. {
      5. static class Program
      6. {
      7. /// <summary>
      8. /// Der Haupteinstiegspunkt für die Anwendung.
      9. /// </summary>
      10. [STAThread]
      11. static void Main()
      12. {
      13. SGL.Initialize();
      14. }
      15. }
      16. }

      MainGame.cs

      C#-Quellcode

      1. using System.Collections.Generic;
      2. using Sharpex2D;
      3. using Sharpex2D.GameService;
      4. using Sharpex2D.Rendering;
      5. namespace Sharpex2DTestGame
      6. {
      7. public class MainGame : Game
      8. {
      9. public override EngineConfiguration OnInitialize(LaunchParameters launchParameters)
      10. {
      11. List<GraphicsManager> graphicsManagerList = new List<GraphicsManager>()
      12. {
      13. new Sharpex2D.Rendering.GDI.GDIGraphicsManager(),
      14. new Sharpex2D.Rendering.OpenGL.OpenGLGraphicsManager(),
      15. new Sharpex2D.Rendering.DirectX9.DirectXGraphicsManager(),
      16. new Sharpex2D.Rendering.DirectX10.DirectXGraphicsManager(),
      17. new Sharpex2D.Rendering.DirectX11.DirectXGraphicsManager()
      18. };
      19. GraphicsManager graphicsManager = graphicsManagerList.Find((x) => { return x.IsSupported; });
      20. System.Windows.Forms.MessageBox.Show(graphicsManager.ToString());
      21. EngineConfiguration engineConfiguration = new EngineConfiguration(graphicsManager);
      22. return engineConfiguration;
      23. }
      24. public override void OnLoadContent()
      25. {
      26. }
      27. }
      28. }

      Exception-Text:

      Quellcode

      1. System.TypeInitializationException wurde nicht behandelt.
      2. HResult=-2146233036
      3. Message=Der Typeninitialisierer für "Sharpex2D.Common.Singleton`1" hat eine Ausnahme verursacht.
      4. Source=Sharpex2D
      5. TypeName=Sharpex2D.Common.Singleton`1
      6. StackTrace:
      7. bei Sharpex2D.Common.Singleton`1.get_Instance()
      8. bei Sharpex2D.SGL.Run(EngineConfiguration engineConfiguration)
      9. bei Sharpex2D.SGL.Initialize(IConfigurator configurator)
      10. bei Sharpex2D.SGL.Initialize()
      11. bei Sharpex2dTestGame1.Program.Main() in c:\users\fabian\documents\visual studio 2015\Projects\SharpexTestGame1\Sharpex2dTestGame1\Program.cs:Zeile 13.
      12. bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
      13. bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
      14. bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
      15. bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
      16. bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
      17. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
      18. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
      19. bei System.Threading.ThreadHelper.ThreadStart()
      20. InnerException:
      21. HResult=-2146232828
      22. Message=Ein Aufrufziel hat einen Ausnahmefehler verursacht.
      23. Source=mscorlib
      24. StackTrace:
      25. bei System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
      26. bei System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
      27. bei System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
      28. bei System.Activator.CreateInstance[T]()
      29. bei Sharpex2D.Common.Singleton`1..cctor()
      30. InnerException:
      31. HResult=-2146233079
      32. Message=Component not found (Sharpex2D.EngineConfiguration).
      33. Source=Sharpex2D
      34. StackTrace:
      35. bei Sharpex2D.ComponentManager.Get[T]()
      36. bei Sharpex2D.Audio.AudioManager..ctor()
      37. InnerException:


      Hatte ursprünglich GDI verwendet, bin dann aber mit Sharpex2D 1.3.0 auf OpenGL umgestiegen und seitdem kommt die Meldung daher. Evtl kannst du damit was anfangen. Ich häng auch mal das Projekt an.
      Hat sich erledigt: Hab das Sharpex1.3.0 Repo mir gezogen, dann die Lib kompilliert, da mir aber VS gemeckert hat, dass eine Funktion "nicht in allen Codepfaden einen Wert zurückgibt", hab ich mir die Funktion mal angesehen und da wurde mit #if Windows und #elseif Mono gefragt, da aber VS keine der beiden dinger kennt, war der teil natürlich grau, hab das dann so umgeschrieben, dass nur der Windoof Teil ausgeführt wird...das war dannn iwie ein Fehler...jetzt gehts ;D
      Nur wie ich oben bereits geschrieben hab: Wie wähle ich am besten den GraphicsManager aus? Gibts da ieine Alternative zu DeviceSelector?

      Lg Radinator ;D

      PS: wäre echt super, wenn du mal bei Zeiten die Tuts aktualisierst, weil mit alter Anleitung und neuer API isses ned unbedingt sooo super zu proggen ;D
      Dateien
      In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

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