What's An XNA
[Also I refer to MonoGame as XNA sometimes, FYI. They're very similar, but just so ya'll don 't get confused I want to warn you.
XNA was a game framework developed by Microsoft during the mid 2000s through around 2013. XNA was part of Microsoft's plan to bring more indie devs to their system.
Microsoft tied XNA with the then new Xbox 360 when XNA first was released (in 2005 or 2006 I forogot), and allowed for people to pay 100 bucks a year to use an app called game hub (app hub? idr) where you could run XNA projects on the XBox 360, without a devkit. Devs could vote on if a published games should be put on the XBLI (Xbox Live Indie) marketplace.
It was quite revolutionary for the time, before XNA it was pretty much impossible for the average Joe Schmo to develop games without spending 1,000s of dollars and luck out and get a devkit. The programming language was rather simple compared to C++/C, using Microsoft's Java rip off (sorry I a m just telling the truth, I am a C# dev so I am not just making fun of C# for the lols, but this is before LINQs and such, and it was so much closer to Java), C# (and also VB.Net but that was WAY later).
C# now is quite popular for game-dev, being the programming language for the engine that shall not be named, GoDot, and many others. But it was fairly new at the time, only coming out in 2002 (2003 idr). Here bellow is a quick little example of a hello world program courtesy of programiz if you don't know what C# looks like for some reason.
public class Program { public static void Main(string[] args) { System.Console.WriteLine("Hello,World!"); } }
Anyways XNA was (is) VERY popular for Indie games(and it's forks), here's a list of some XNA/FNA/MonoGame games.
Terraria,
Fez,
Stardew Valley,
Celeste,
Axiom Verge,
SpeedRunners,
Bastion,
and many more
Unfortunately though, Microsft decied to can it in 2013. It wasen't comptiable with WinRT and Windows * apps and the last release was "XNA 4.0 Refresh"
Thankfully people loved XNA enough to fork it, right now MonoGame is designed for people to make new games (and what I'll probbaly be writing som tutorials on in the future!) and it does change some things. While there is also FNA which is aimed more from porting an exsiting XNA game, for example Terraria uses FNA (it started out as an XNA) game. Terraria uses it now.
My Thoughts || Why I Love It
Now I acuttaly knew about XNA long before I knew how to program. When I was younger, we had a Windows 7 PC with Visual Studio 2010, and I learned that Terraira was built. So I installed Game Studio 4.0, and had no fucking idea what to do at all. I gave up, but I always thought it looked 'cool'.
Fast foward to around last year, after some failed games. I decided to make a simple proof of concept Terraria clone in Love2D, however I quickly learned that love, may be loved. But it doesn't love games like Terraria, and I decided to port it to LibGDX, but yeah I cannot figure out how to set it up for some reason, so I went with MonoGame (a fork of XNA). And I have been loving it.
And I have been using ever since!
I find it pretty easy to understand, and you don't have to deal with an annoying UI like in some game engines (I know you can use Rider ofr Unity, but eh I do not liek Ruider and I find it annoying), it is better and easier than Unity for 2D, in my very biased personal opinion (3d is a different story, but XNA is used more for 2D and such). Here's an example of the main content.
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; namespace DaleJump; public class Game1 : Game { private GraphicsDeviceManager _graphics; private SpriteBatch _spriteBatch; public Game1() { _graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; IsMouseVisible = true; } protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } protected override void LoadContent() { _spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: use this.Content to load your game content here } protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) Exit(); // TODO: Add your update logic here base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } }
Well honestly that's quite it, I'll link my other article on making a doodle jump clone when I make it. But yeah, I like it and I wanted to talk a bit.