Monogame Sprite Class









up vote
0
down vote

favorite












Im working on a level editor in monogame for my engine.



I want to make a class where i can call a simple function and it will draw a sprite.



This is the function i want to call - and as you may know you have to be able to load and unload content and use the draw method.



Question: How would I make this be able to use those so that all I have to do is call this function and it works?



Here is the function:



public static void DrawSprite(Texture2D Texture, string Path, Vector2 Position, Color Color)












share|improve this question























  • What do you wanna do with your path parameter?
    – John Ephraim Tugado
    Nov 12 at 5:44










  • That is the path of the sprite in the project folder
    – Bloody Mustache89
    Nov 12 at 6:03










  • So when i do Texture.loadcontent thats the path
    – Bloody Mustache89
    Nov 12 at 6:03















up vote
0
down vote

favorite












Im working on a level editor in monogame for my engine.



I want to make a class where i can call a simple function and it will draw a sprite.



This is the function i want to call - and as you may know you have to be able to load and unload content and use the draw method.



Question: How would I make this be able to use those so that all I have to do is call this function and it works?



Here is the function:



public static void DrawSprite(Texture2D Texture, string Path, Vector2 Position, Color Color)












share|improve this question























  • What do you wanna do with your path parameter?
    – John Ephraim Tugado
    Nov 12 at 5:44










  • That is the path of the sprite in the project folder
    – Bloody Mustache89
    Nov 12 at 6:03










  • So when i do Texture.loadcontent thats the path
    – Bloody Mustache89
    Nov 12 at 6:03













up vote
0
down vote

favorite









up vote
0
down vote

favorite











Im working on a level editor in monogame for my engine.



I want to make a class where i can call a simple function and it will draw a sprite.



This is the function i want to call - and as you may know you have to be able to load and unload content and use the draw method.



Question: How would I make this be able to use those so that all I have to do is call this function and it works?



Here is the function:



public static void DrawSprite(Texture2D Texture, string Path, Vector2 Position, Color Color)












share|improve this question















Im working on a level editor in monogame for my engine.



I want to make a class where i can call a simple function and it will draw a sprite.



This is the function i want to call - and as you may know you have to be able to load and unload content and use the draw method.



Question: How would I make this be able to use those so that all I have to do is call this function and it works?



Here is the function:



public static void DrawSprite(Texture2D Texture, string Path, Vector2 Position, Color Color)









c# class monogame






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 12 at 6:23









JohnB

1,6451116




1,6451116










asked Nov 12 at 5:11









Bloody Mustache89

41




41











  • What do you wanna do with your path parameter?
    – John Ephraim Tugado
    Nov 12 at 5:44










  • That is the path of the sprite in the project folder
    – Bloody Mustache89
    Nov 12 at 6:03










  • So when i do Texture.loadcontent thats the path
    – Bloody Mustache89
    Nov 12 at 6:03

















  • What do you wanna do with your path parameter?
    – John Ephraim Tugado
    Nov 12 at 5:44










  • That is the path of the sprite in the project folder
    – Bloody Mustache89
    Nov 12 at 6:03










  • So when i do Texture.loadcontent thats the path
    – Bloody Mustache89
    Nov 12 at 6:03
















What do you wanna do with your path parameter?
– John Ephraim Tugado
Nov 12 at 5:44




What do you wanna do with your path parameter?
– John Ephraim Tugado
Nov 12 at 5:44












That is the path of the sprite in the project folder
– Bloody Mustache89
Nov 12 at 6:03




That is the path of the sprite in the project folder
– Bloody Mustache89
Nov 12 at 6:03












So when i do Texture.loadcontent thats the path
– Bloody Mustache89
Nov 12 at 6:03





So when i do Texture.loadcontent thats the path
– Bloody Mustache89
Nov 12 at 6:03













1 Answer
1






active

oldest

votes

















up vote
1
down vote













If you are going to leave the drawing to a single static method then you would be restricting what you are able to draw. I suggest creating an interface and do some abstraction.



Interface



public interface IGameObject

void Update(GameTime gameTime);
void Draw();



Utility Class



public sealed class GameUtility

private static GameUtility instance = null;
private static readonly object _lock = new object();

public ContentManager ContentManager get; private set;

public SpriteBatch SpriteBatch get; private set;

public static GameUtility Instance

get

lock (_lock)

if (instance == null)

instance = new GameUtility();


return instance;




public void SetContentManager(ContentManager contentManager)

this.ContentManager = contentManager;


public void SetSpriteBatch(SpriteBatch spriteBatch)

this.SpriteBatch = spriteBatch;


public GameUtility(ContentManager contentManager, SpriteBatch spriteBatch)

this.contentManager = contentManager;
this.spriteBatch = spriteBatch;




Game Objects



public class Hero : IGameObject

private Texture2D texture;
private Vector2 position;
private Color color;

public Hero(string path)

texture = GameUtility.Instance.ContentManager.Load<Texture2D>(path);


public void Update(GameTime gameTime)

// Do game update logic


public void Draw()

GameUtility.Instance.SpriteBatch.Begin();

GameUtility.Instance.SpriteBatch.Draw(texture, position, color);

GameUtility.Instance.SpriteBatch.End();




Game Class



Initialize the GameUtility



GameUtility.Instance.SetContentManager(contentManager);
GameUtility.Instance.SetSpriteBatch(spriteBatch);


Create the game objects



gameObects = new List<IGameObject>();

gameObjects.Add(new Hero("some path"));


Utilize the interface



protected override void Draw(GameTime gameTime)

graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

foreach (IGameObject gameObject in gameObjects)

gameObject.Draw();


base.Draw(gameTime);



The beauty of this approach is you can perform different drawings based on your needs. For example, you could use a Rectangle instead of Vector2 based on different scenarios. You can also draw a sprite font or something else.



For unloading content, there is only one option which is



GameUtility.Instance.ContentManager.Unload();


You better unload content during your transition to the next level as calling ContentManager.Unload() will dispose all resources. As to why it disposes everything in one go, I don't really understand but that is the design.



Hope this answer give you some insight. I would not suggest creating this public static void DrawSprite.






share|improve this answer




















    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53256250%2fmonogame-sprite-class%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    1
    down vote













    If you are going to leave the drawing to a single static method then you would be restricting what you are able to draw. I suggest creating an interface and do some abstraction.



    Interface



    public interface IGameObject

    void Update(GameTime gameTime);
    void Draw();



    Utility Class



    public sealed class GameUtility

    private static GameUtility instance = null;
    private static readonly object _lock = new object();

    public ContentManager ContentManager get; private set;

    public SpriteBatch SpriteBatch get; private set;

    public static GameUtility Instance

    get

    lock (_lock)

    if (instance == null)

    instance = new GameUtility();


    return instance;




    public void SetContentManager(ContentManager contentManager)

    this.ContentManager = contentManager;


    public void SetSpriteBatch(SpriteBatch spriteBatch)

    this.SpriteBatch = spriteBatch;


    public GameUtility(ContentManager contentManager, SpriteBatch spriteBatch)

    this.contentManager = contentManager;
    this.spriteBatch = spriteBatch;




    Game Objects



    public class Hero : IGameObject

    private Texture2D texture;
    private Vector2 position;
    private Color color;

    public Hero(string path)

    texture = GameUtility.Instance.ContentManager.Load<Texture2D>(path);


    public void Update(GameTime gameTime)

    // Do game update logic


    public void Draw()

    GameUtility.Instance.SpriteBatch.Begin();

    GameUtility.Instance.SpriteBatch.Draw(texture, position, color);

    GameUtility.Instance.SpriteBatch.End();




    Game Class



    Initialize the GameUtility



    GameUtility.Instance.SetContentManager(contentManager);
    GameUtility.Instance.SetSpriteBatch(spriteBatch);


    Create the game objects



    gameObects = new List<IGameObject>();

    gameObjects.Add(new Hero("some path"));


    Utilize the interface



    protected override void Draw(GameTime gameTime)

    graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

    foreach (IGameObject gameObject in gameObjects)

    gameObject.Draw();


    base.Draw(gameTime);



    The beauty of this approach is you can perform different drawings based on your needs. For example, you could use a Rectangle instead of Vector2 based on different scenarios. You can also draw a sprite font or something else.



    For unloading content, there is only one option which is



    GameUtility.Instance.ContentManager.Unload();


    You better unload content during your transition to the next level as calling ContentManager.Unload() will dispose all resources. As to why it disposes everything in one go, I don't really understand but that is the design.



    Hope this answer give you some insight. I would not suggest creating this public static void DrawSprite.






    share|improve this answer
























      up vote
      1
      down vote













      If you are going to leave the drawing to a single static method then you would be restricting what you are able to draw. I suggest creating an interface and do some abstraction.



      Interface



      public interface IGameObject

      void Update(GameTime gameTime);
      void Draw();



      Utility Class



      public sealed class GameUtility

      private static GameUtility instance = null;
      private static readonly object _lock = new object();

      public ContentManager ContentManager get; private set;

      public SpriteBatch SpriteBatch get; private set;

      public static GameUtility Instance

      get

      lock (_lock)

      if (instance == null)

      instance = new GameUtility();


      return instance;




      public void SetContentManager(ContentManager contentManager)

      this.ContentManager = contentManager;


      public void SetSpriteBatch(SpriteBatch spriteBatch)

      this.SpriteBatch = spriteBatch;


      public GameUtility(ContentManager contentManager, SpriteBatch spriteBatch)

      this.contentManager = contentManager;
      this.spriteBatch = spriteBatch;




      Game Objects



      public class Hero : IGameObject

      private Texture2D texture;
      private Vector2 position;
      private Color color;

      public Hero(string path)

      texture = GameUtility.Instance.ContentManager.Load<Texture2D>(path);


      public void Update(GameTime gameTime)

      // Do game update logic


      public void Draw()

      GameUtility.Instance.SpriteBatch.Begin();

      GameUtility.Instance.SpriteBatch.Draw(texture, position, color);

      GameUtility.Instance.SpriteBatch.End();




      Game Class



      Initialize the GameUtility



      GameUtility.Instance.SetContentManager(contentManager);
      GameUtility.Instance.SetSpriteBatch(spriteBatch);


      Create the game objects



      gameObects = new List<IGameObject>();

      gameObjects.Add(new Hero("some path"));


      Utilize the interface



      protected override void Draw(GameTime gameTime)

      graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

      foreach (IGameObject gameObject in gameObjects)

      gameObject.Draw();


      base.Draw(gameTime);



      The beauty of this approach is you can perform different drawings based on your needs. For example, you could use a Rectangle instead of Vector2 based on different scenarios. You can also draw a sprite font or something else.



      For unloading content, there is only one option which is



      GameUtility.Instance.ContentManager.Unload();


      You better unload content during your transition to the next level as calling ContentManager.Unload() will dispose all resources. As to why it disposes everything in one go, I don't really understand but that is the design.



      Hope this answer give you some insight. I would not suggest creating this public static void DrawSprite.






      share|improve this answer






















        up vote
        1
        down vote










        up vote
        1
        down vote









        If you are going to leave the drawing to a single static method then you would be restricting what you are able to draw. I suggest creating an interface and do some abstraction.



        Interface



        public interface IGameObject

        void Update(GameTime gameTime);
        void Draw();



        Utility Class



        public sealed class GameUtility

        private static GameUtility instance = null;
        private static readonly object _lock = new object();

        public ContentManager ContentManager get; private set;

        public SpriteBatch SpriteBatch get; private set;

        public static GameUtility Instance

        get

        lock (_lock)

        if (instance == null)

        instance = new GameUtility();


        return instance;




        public void SetContentManager(ContentManager contentManager)

        this.ContentManager = contentManager;


        public void SetSpriteBatch(SpriteBatch spriteBatch)

        this.SpriteBatch = spriteBatch;


        public GameUtility(ContentManager contentManager, SpriteBatch spriteBatch)

        this.contentManager = contentManager;
        this.spriteBatch = spriteBatch;




        Game Objects



        public class Hero : IGameObject

        private Texture2D texture;
        private Vector2 position;
        private Color color;

        public Hero(string path)

        texture = GameUtility.Instance.ContentManager.Load<Texture2D>(path);


        public void Update(GameTime gameTime)

        // Do game update logic


        public void Draw()

        GameUtility.Instance.SpriteBatch.Begin();

        GameUtility.Instance.SpriteBatch.Draw(texture, position, color);

        GameUtility.Instance.SpriteBatch.End();




        Game Class



        Initialize the GameUtility



        GameUtility.Instance.SetContentManager(contentManager);
        GameUtility.Instance.SetSpriteBatch(spriteBatch);


        Create the game objects



        gameObects = new List<IGameObject>();

        gameObjects.Add(new Hero("some path"));


        Utilize the interface



        protected override void Draw(GameTime gameTime)

        graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

        foreach (IGameObject gameObject in gameObjects)

        gameObject.Draw();


        base.Draw(gameTime);



        The beauty of this approach is you can perform different drawings based on your needs. For example, you could use a Rectangle instead of Vector2 based on different scenarios. You can also draw a sprite font or something else.



        For unloading content, there is only one option which is



        GameUtility.Instance.ContentManager.Unload();


        You better unload content during your transition to the next level as calling ContentManager.Unload() will dispose all resources. As to why it disposes everything in one go, I don't really understand but that is the design.



        Hope this answer give you some insight. I would not suggest creating this public static void DrawSprite.






        share|improve this answer












        If you are going to leave the drawing to a single static method then you would be restricting what you are able to draw. I suggest creating an interface and do some abstraction.



        Interface



        public interface IGameObject

        void Update(GameTime gameTime);
        void Draw();



        Utility Class



        public sealed class GameUtility

        private static GameUtility instance = null;
        private static readonly object _lock = new object();

        public ContentManager ContentManager get; private set;

        public SpriteBatch SpriteBatch get; private set;

        public static GameUtility Instance

        get

        lock (_lock)

        if (instance == null)

        instance = new GameUtility();


        return instance;




        public void SetContentManager(ContentManager contentManager)

        this.ContentManager = contentManager;


        public void SetSpriteBatch(SpriteBatch spriteBatch)

        this.SpriteBatch = spriteBatch;


        public GameUtility(ContentManager contentManager, SpriteBatch spriteBatch)

        this.contentManager = contentManager;
        this.spriteBatch = spriteBatch;




        Game Objects



        public class Hero : IGameObject

        private Texture2D texture;
        private Vector2 position;
        private Color color;

        public Hero(string path)

        texture = GameUtility.Instance.ContentManager.Load<Texture2D>(path);


        public void Update(GameTime gameTime)

        // Do game update logic


        public void Draw()

        GameUtility.Instance.SpriteBatch.Begin();

        GameUtility.Instance.SpriteBatch.Draw(texture, position, color);

        GameUtility.Instance.SpriteBatch.End();




        Game Class



        Initialize the GameUtility



        GameUtility.Instance.SetContentManager(contentManager);
        GameUtility.Instance.SetSpriteBatch(spriteBatch);


        Create the game objects



        gameObects = new List<IGameObject>();

        gameObjects.Add(new Hero("some path"));


        Utilize the interface



        protected override void Draw(GameTime gameTime)

        graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

        foreach (IGameObject gameObject in gameObjects)

        gameObject.Draw();


        base.Draw(gameTime);



        The beauty of this approach is you can perform different drawings based on your needs. For example, you could use a Rectangle instead of Vector2 based on different scenarios. You can also draw a sprite font or something else.



        For unloading content, there is only one option which is



        GameUtility.Instance.ContentManager.Unload();


        You better unload content during your transition to the next level as calling ContentManager.Unload() will dispose all resources. As to why it disposes everything in one go, I don't really understand but that is the design.



        Hope this answer give you some insight. I would not suggest creating this public static void DrawSprite.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 12 at 6:21









        John Ephraim Tugado

        3,6311421




        3,6311421



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53256250%2fmonogame-sprite-class%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Top Tejano songwriter Luis Silva dead of heart attack at 64

            ReactJS Fetched API data displays live - need Data displayed static

            Evgeni Malkin