[SharpexGL]Zu Doof um DrawString zu nutzen?

  • C#
  • .NET (FX) 4.0

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ThuCommix.

    [SharpexGL]Zu Doof um DrawString zu nutzen?

    Servus,
    Bin gerade an mir selbst am zweifeln. Bin ich einfach nur zu dumm oder hat sich in der Engine etwas geändert? ( Ich tippe aus ersteres)

    Ich habe, orientiert an dem TestGame welches man sich im Tutorialthread der Engine herunterladen kann, alles soweit nachgebastelt.
    hier mal der aufbau bis jetzt:
    MyGame.cs
    Spoiler anzeigen

    C#-Quellcode

    1. public class MyGame : Game
    2. {
    3. public MyGame()
    4. {
    5. }
    6. public override void OnTick(float elapsed)
    7. {
    8. if (SceneManager.ActiveScene.GetType() == typeof(testscene)) //nur zu Testzwecken.. evtl scheißdreck
    9. {
    10. }
    11. else
    12. {
    13. SceneManager.SetScene(SceneManager.Get<testscene>());
    14. }
    15. }
    16. public override void OnRendering(IRenderer renderer, float elapsed)
    17. {
    18. renderer.Begin();
    19. //Hier werden nun texturen gezeichnet.
    20. renderer.Close();
    21. }
    22. public override void OnLoadContent()
    23. {
    24. SceneManager.AddScene(new testscene());
    25. SceneManager.SetScene(SceneManager.Get<testscene>());
    26. }
    27. public override void OnInitialize()
    28. {
    29. }
    30. public override void OnUnload()
    31. {
    32. }
    33. public override void OnClose()
    34. {
    35. }
    36. }


    testscene.cs
    Spoiler anzeigen

    C#-Quellcode

    1. public class testscene : IScene
    2. {
    3. #region IScene Member
    4. public SharpexGL.Framework.Entities.EntityEnvironment EntityEnvironment { get; set; }
    5. public void Initialize()
    6. {
    7. _player = new player();
    8. }
    9. private player _player;
    10. public void LoadContent(ContentManager content)
    11. {
    12. _player.OnLoadContent(content);
    13. }
    14. public void Render(IRenderer graphicRenderer, float elapsed)
    15. {
    16. _player.OnRender(graphicRenderer, elapsed);
    17. }
    18. public void Tick(float elapsed)
    19. {
    20. }
    21. #endregion
    22. }



    player.cs
    Spoiler anzeigen

    C#-Quellcode

    1. class player
    2. {
    3. public player()
    4. {
    5. _position = new Vector2(200, 200);
    6. }
    7. private Vector2 _position;
    8. private Typeface _test;
    9. private GdiFont _testFont;
    10. public void OnRender(IRenderer renderer, float elapsed)
    11. {
    12. renderer.DrawString("Test", _testFont, new Rectangle(100, 100, 200, 100), Color.Black);
    13. }
    14. public void OnLoadContent(ContentManager content)
    15. {
    16. _test = content.Load<Typeface>("headfont.snb");
    17. _testFont = new GdiFont(_test);
    18. }
    19. }



    Beim Debuggen bekomme ich keiner Errors sondern nur eine Form mit blauem Hintergrund. Eigentlich sollte dort ein kleiner Text stehen. Hat vlt jemand ein kleine Mini/test/projekt welches die neuste SharpexGL version nutzt?

    MfG

    Chriis
    Habs mal durchprobiert. Ab der Render Methode von der testscene erscheint keine MsgBox mehr.

    Edit:
    Warum muss ich bei der Methode DrawString jetzt eigentlich anstatt eines Vektors, ein Rectangle angeben?

    Edit2:
    Hab jetzt die MyGame klasse abgeändert. Jetz funzt es auch.
    MyGame.cs

    C#-Quellcode

    1. public class MyGame : Game
    2. {
    3. public MyGame()
    4. {
    5. }
    6. private testscene _scene1; //NEU
    7. public override void OnTick(float elapsed)
    8. {
    9. if (SceneManager.ActiveScene.GetType() == typeof(testscene)) //nur zu Testzwecken.. evtl scheißdreck
    10. {
    11. }
    12. else
    13. {
    14. SceneManager.SetScene(SceneManager.Get<testscene>());
    15. }
    16. }
    17. public override void OnRendering(IRenderer renderer, float elapsed)
    18. {
    19. renderer.Begin();
    20. _scene1.Render(renderer, elapsed); //NEU
    21. //Alternativ funktioniert hier auch
    22. //SceneManager.ActiveScene.Render(renderer, elapsed);
    23. //Ich glaube das is sogar die bessere Variante
    24. renderer.Close();
    25. }
    26. public override void OnLoadContent()
    27. {
    28. SceneManager.AddScene(_scene1); //BISCHEN NEU :D
    29. SceneManager.SetScene(SceneManager.Get<testscene>());
    30. }
    31. public override void OnInitialize()
    32. {
    33. _scene1 = new testscene(); //NEU
    34. }
    35. public override void OnUnload()
    36. {
    37. }
    38. public override void OnClose()
    39. {
    40. }
    41. }

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

    Ok eine letzte Frage noch :3
    ich habe einen Blick in den Source Code geworfen und wenn ich das nicht missverstanden habe, dann müsste dies hier

    C#-Quellcode

    1. SceneManager.ActiveScene.Render(renderer, elapsed)

    doch eigentlich von selbst passieren. Oder sehe ich das falsch bzw. habe es einfach falsch verstanden?