I started C# programming, in order to later develop games with XNA. I read a good game development book for C#. Since I already knew other languages, I could quickly learn C# features and syntax code. I then stepped over into XNA. Since the book I was reading was a bit old, I put it aside, and started to look at game development tutorials about XNA over the Internet. I could accomplish and understand most of them, using 2D graphics. I created animated sprites, made my characters move in any direction, scrolled my background together with my characters movement, and so on. Everything was done with "raw" XNA.

I found some of those things hard to understand, and I found that some things wee already be built into the framework. I found other game engines, which I could clearly understand at least the simple line codes, such as "FlatRedBall", "Axiom" and "Quick Start Engine". I already knew of the famous ones, like "OGRE", "Unreal" and "Unity". At the same time, I was tempted to throw it all away, and start learning some famous game engine programming. I wanted to stay with XNA, as it took me time to learn; time I wouldn't like to waste it.

This time, I leave it up to the experienced ones. Can I go through some game engine, and use what it has to offer, even if I'm starting with game development? Some people could think that it is good to get use to the boring routines of a naked framework. If so, what would be the recommended one to start off with? I heard that it varies from market to market. We could perhaps consider that I want an RPG-specific.

  • 1
    \$\begingroup\$ I had the same thing on my mind... I've been using XNA for like 4 years. I started out making an MMORPG... Look where that got me, no where. As always, start small, use something you like unless you have bigger plans, and just get something done before too much time flies by. \$\endgroup\$ Dec 8, 2010 at 3:35
  • \$\begingroup\$ @Omnion, using XNA for 4 years trying to make a MMORPG is not a matter of what you're using, but a matter of determination, dedication, free time, and practical application. Anyone can complete a MMORPG using XNA, as long as they retain motivation and dedication over time. The amount of time would vary based on amount of free time and speed of work, but no matter the size or scope of the project, it CAN BE practical even if one is starting big. The key is organizing the engineering process. Baby steps, one step at a time, over time, consistently, completes a project no matter the scale. \$\endgroup\$
    – user31353
    Jun 2, 2013 at 5:16
  • 1
    \$\begingroup\$ I only mention this to encourage people to not believe their project is too big, but instead to simply understand the reality of practicality. If one understands that it takes more than dreams to finish a project, they will go more than "no where". I always want to encourage people to realize their dream, and to not compromise it. Only make it practical so that it CAN be accomplished, no matter the size. In time, anything is possible. \$\endgroup\$
    – user31353
    Jun 2, 2013 at 5:18

3 Answers 3


It depends on what you want to learn. If you want to "just create a game" you can be good with an engine. I personally do not recommend this.

If you want to really understand how computer graphics works you must go deeper and learn all the stuff. From refreshing your linear algebra (at least matrices, vectors and linear spaces) to understanding how graphics pipelines work. XNA is the best framework to start with. My first game was in it (I mean real game, first 3D app was battle tanks in openGL). If you want to start 3D programming, don't have such ambitious plans, you can't do an RPG now. You should try to make some game where you are flying in space full of cubes and trying to shoot the red ones, to learn the basics. It will probably take you more time than you think :). But it will teach you lots.

And go for it! 3D graphics programming is the best thing you can do for living. It is hard, fun, and creative in one package.

  • 3
    \$\begingroup\$ Might be worth checking out MonoGame instead of XNA. Microsoft have stopped developing XNA and it lacks Windows 8 Metro UI support. According to some posts I read on Reddit their representatives are actually recommending MonoGame. And you get cross platform (Linux, OSX, Android, iOS) as a result. \$\endgroup\$ Jun 2, 2013 at 14:21

There is nothing wrong with using an existing engine, it all comes down to your goals.

If you are most interested in just building some games or game design, the faster you get to the gameplay code the better. Something like Unity is great here, as you can use your C# knowledge and start attaching scripts to objects and have something running immediately.

If you want to become a game programmer, then you need to understand things at a lower level. A framework like XNA is a good starting place. You can rely on the framework to get things up and running and then start replacing parts of the framework with your own code as you learn how to build each component of your game.

  • 1
    \$\begingroup\$ I like yours answer more than mine. +1 for you. \$\endgroup\$
    – Notabene
    Dec 8, 2010 at 1:52
  • 6
    \$\begingroup\$ It's especially useful if say you want to be a game programmer, to start with an engine, and then when you make your own go study that one you used as a good example (assuming you enjoyed using it) to contrast with other resources you find on engine architecture. \$\endgroup\$ Dec 8, 2010 at 6:38
  • \$\begingroup\$ But still you should be solid rock in computer graphics basics, even if you are using engine. \$\endgroup\$
    – Notabene
    Dec 8, 2010 at 10:46


//From Zero to Amateur over Years of Learning

I would definitely stay away from high level engines like Unity or Torque2D MIT. They are great for small prototypes, but I would never take them seriously to develop my own video game. Why would I? What is the point unless it was nothing more than a simple SideScroller or Arcade remake?

Most game engines, libraries, or frameworks do nothing more than the simplest of tasks with a whole lot of bloated code with functions and features you'll never use.

When I was new in game development years ago, I started at the top. Very high level engines. Not anything too high like RPG MAKER, but definitely high up there like Unity and Torque. Then I went lower, to XNA and C#, because it had so many resources and tutorials. My primary project needed the performance, or perhaps I'm just obsessive-compulsive about wanting incredible performance in my software, even if it is not a large project. XNA simply did not cut it, and I had a lot of problems with the engine that I read required a headache to fix. What is the point of using something "higher level" like XNA/C# when you're doing the same work (fixing XNA bugs & problems) as you would rolling your own engine in C++?

After quite awhile of learning, I eventually learned about how game engines are designed and began looking into the code of the engines themselves. Reading what most professionals have to say and the complaints of the critics of game engines made me realize, 'Why even use an engine?"

Brushing up on my C++ and really getting into some philosophies used in that language helped me a lot. However, I had spent so much time learning about so much I just wanted to start making a game.

So I ended up with something with quite a lot of praise, was C++, and very low level: SDL. Unfortunately, this was a headache. It is so low level, I see next to no reason why to even use this library. I'd rather simply learn OpenGL and do it myself from scratch. Honestly, it was mostly the fact I needed to implement my own code to do something as basic as flip an image (and other's implementation wasn't working because of how I handled sprites) which drove me to trash SDL permanently. It's great if you want a software renderer, but IMO I'd rather trash it to go lower with hardware (OpenGL) or higher (SFML).

Not wanting to buy another book on amazon and learn yet another API, I went higher. SFML is simply wonderful, not to mention highly praised all over the internet. I have read almost an endless number of positive reviews, with next to no negatives. I cannot say the same for SDL. It handles all of the extreme basics, but leaves the rest up to me and other libraries of my choosing. I've stuck with it ever since.

IMO, a game engine is just silly. Low level libraries are much better choices for both expert and beginner programmers.

Also to note, I have learned more about programming concepts and have sharpened my software development skills when forced to handle things at a lower level than I have ever learned with high level WYSIWYG game engines.

What does something like Unity give you over XNA? Visual editing and a crutch. Newbies will eventually learn you'll still have to code pretty much the entire game just as you would if you had bare C++, and the visual editors are inefficient to something you could create yourself.

What does something like XNA give you over SFML or your own implementation of OpenGL and other useful libraries? IMO, absolutley nothing good. Worse performance, C# instead of C++, a plethora of newbie tutorials but significantly less professionalism, and some headache savers that IMO are once more just a crutch for what you should just learn with C++. I was initially intimidated with C++ and loved C#, mostly because of hear-say and rumors of the opinions of fools who had the same troubles I had initially with C++: I just wanted a good enough programmer. I realized I needed to learn more fundamentals and sharpen my weaknesses in order to overcome the troubles I had with C++, which C# "made easy." Do I ever miss the simplicity of some things in C#? Not even! I know how to do it in C++ without a hassle.

If low level libraries or learning DirectX/OpenGL intimidates you, then just wait until you start getting into the complexity of creating a full video game.

My philosophy on game engines can be summed up in two examples explaining the redundancy and uselessness of engines, except in isolated circumstances.

Newbies who are intimidated with low level libraries, will have a seizure when they discover that even with a high level engine like Unity, (besides graphics rendering, audio playing, content loading; real basic stuff) it will be almost identical to making a game from scratch. The complexity is in engineering a game, not understanding the API or developing the classes to render to the display.

Experts who aren't intimidated by the complexity of creating a full game in something like Unity, have no use for Unity because the time in which it would take to confidently learn the API and requirements of a specific engine is probably more of a headache and more time than it would take to code the few classes required to do the basics.

So engines are useless to newbies, because newbies can't make anything with them because they lack the engineering skills. Likewise, engines are useless to veterans, because they already have the engineering skills to do it without an engine, and might as well roll their own more efficient, specific 'engine' than to go through the headache of learning both the game engine's API, functions, and performance quirks. Not to mention the massive nightmare of working with engines that you sometimes can't touch because they're not open source (or even if they are, reading other's code can be a nightmare at times).

Heck, even some "low level" "game frameworks" are nothing more than a few classes to create a window, render to the display, and play audio. This is something a professional could do themselves from scratch using other libraries like SDL/SFML or their own implementation of OpenGL/DirectX/OpenAL, in a fraction of the time it takes to actually complete a full video game.


  1. If you want to program, learn to be a programmer.

  2. Avoid using engines, but do not be a fool and ignore incredibly useful libraries.

  3. If you want to be a Game Designer, try an WYSIWYG engine and pump those games out!

  4. If you want to be a Game Programmer, avoid engines like the crutch that they are.

  5. For ME, using higher level game engines crippled my ability to become a programmer. The moment I started using lower level libraries instead or not using any library at all, I began to learn so much that I quickly went from a total newbie to someone that can now create video games without any reference, tutorials, or book alongside me. Just my compiler and a lot of engineering and practice.

The amount of learning I gained from low level libraries in a SHORT amount of time was much greater than the amount I gained in a VERY LONG amount of time with higher level ENGINES.**

  • 2
    \$\begingroup\$ Disclaimer: This is just my story, and my learning style. Other people might be different. There was just a world of difference for the learning process for me when I tried to be a Game PROGRAMMER (low level stuff) instead of a Game DESIGNER (reliant on engines). \$\endgroup\$
    – user31353
    Jun 2, 2013 at 5:26

Not the answer you're looking for? Browse other questions tagged .