How Do You Approach 2D Animation for Game Characters?

I’m curious how MonoGame developers here approach 2D character animation, especially when a game has several characters with different movement states.

For a simple character, a sprite sheet with idle, walking, running, jumping, and attack animations is fairly straightforward. But as the number of characters and actions increases, keeping animation timing, frame organization, transitions, and reusable assets manageable can become more challenging.

I’ve been looking at different approaches to 2D production workflows, including the work done by Pixel Studios INC, and I’m interested in how developers handle this on the game side.

Do you generally create your animations in tools such as Aseprite or Photoshop and then import sprite sheets into MonoGame, or do you use a different workflow?

Also, how do you handle animation states and transitions in your projects?

Morning,

I don’t have a ton of experience so take what I say with a grain of salt. I went to a coding bootcamp and learned React.js back in 2019. I really enjoyed the whole Component of programming. Basically, what that is, write it once and use it in many different places, think like a button that you pass in parameters that change the text, color and place it takes you. I also do not draw my own art. I am learning right now, so the tutorials supply the art, or I am reverse engineering a game a YouTuber created over the weekend and they posted the art assets so I bought them.

With that, I use Enums to control the state. In my Space Escape game that I built using the book Learning Programming with MonoGame, I have one file called “State.cs”. I used that for both the Hero and the Gremlin objects. They both had the same animation movements so it made sense. However, I am reverse engineering a game a YouTuber named a Byte of Michael created over a weekend in MonoGame. At first I had one enum with all the states for the games Spirit and Player classes, but as I been working on it, I realized that isn’t going to work so I split them out to have their own state files with specific enums for each.

Hopefully that helps a little bit.