I'm at a dilemma which seems should soon become an important issue for a lot of developers.

If I build a game in XNA, I won't be able to publish it on the Windows 8 Store, as it would be a classic application -- and classic applications can't be sold on the store.

If I build a game in Metro DirectX, I would be able to sell it on the Store, but porting it to Windows Phone would involve porting it to Reach XNA, which in fact would likely involve more effort even than porting to OS X or Android -- both of which support C++. Of all the WinRT API that is supported on C++/JS/.NET, DirectX can only be programmed from C++. It's also unlikely that Microsoft will update Windows 7 or Vista to support the new DirectX features, although that would make the Metro DirectX the first new version of DirectX to stop supporting the immediate predecessor OS.

If I build a game in Pre-Win8 DirectX 9/10/11, I won't be able to sell it on the Windows Store or Windows Phone, but I could sell it on something like Steam. It would also involve the most amount of manual plumbing. In fact, DirectWrite, despite being part of DirectX 11, doesn't talk to Direct3D.

I'm getting really tired of all these restrictions -- artificial and otherwise -- and I'm coming to a point where I'm considering switching to a platform with a less fragmented API, like Android or Mac/iOS.

As far as bringing a game into market goes, excluding the actual market share of any platforms that I might consider, what other factors would help me in making a decision?

Just a few years ago this question was a lot easier to answer: if you were primarily concerned with Windows platforms, all you had to answer was whether you wanted DirectX, XNA, or something like SlimDX. If you made the wrong decision, no biggie -- all you really would have lost is XBox and the fairly small Windows Phone market.

  • \$\begingroup\$ Have a look a MonoGame. \$\endgroup\$
    – 3Dave
    Aug 2, 2012 at 14:32

3 Answers 3


This is not a direct answer to your question, but some advice.

You want to hit every market you can. Especially as s mall indie/hobbyist developer, every single potential customer matters. Developing for a single platform (even a popular one) is a very unwise decision in today's world of 6+ highly popular gaming platforms. At the very least, you want to be able to hit PC, iOS, and Android (Windows Phone is a very small market compared to those three). Hitting XBL would also be nice, but it is not an easy thing to do as a hobbyist unless you use XNA (but don't do that). Note that those three primary platforms all have widely different low-level APIs and so trying to pick a single platform API is going to land you nowhere.

I've been led to believe that XNA is unlikely to ever receive another major update again, and it may be a legacy API at this point. If you're starting development on a longer term project, you might be better off picking a platform API that is receiving regular updates. I would avoid XNA unless Microsoft recommits to the API.

While Metro's new API is not usable on the current Windows Phone, it will likely be available on the next version of the WP OS. Again depending on the length of the project, it may not make sense to worry about WP7 limitations. Metro of course will still not be found on any other devices (well, maybe the next XBox), and porting to iOS, Android, OS X, Linux, or the other consoles is going to require changes to use various APIs.

Your game should ideally not be dependent on any of these platform technologies. The vast majority of your game logic should not even be aware of whether the graphics API in use is raw D3D, XNA, OpenGL, or so on. Your game logic should not be dependent on any particular low-level OS routines. Your game should be relatively straight forward to port to any of the major OSes, including PC, iOS, Android, consoles, and so on.

Coding an engine that can handle this takes a bit of thought and understanding, but it's not hard, strictly speaking. Write a thin wrapper around the low-level platform-specific APIs, and then porting largely becomes a matter of rewriting those wrappers and nothing else. The biggest issue to deal with aside from that is just testing the different input schemes (touch vs mouse/keyboard vs controller) and varying screen resolutions. I dare say that so long as you target at least two fairly different platforms from day one (say, PC and iOS) you'll have little problem adding more, and if you have any specific questions about the APIs or porting then you already know a fantastic place to ask them and get answers.

You can also consider targeting HTML5, depending on what kind of game you're going to build. For 2D games, the platform support for HTML5 is pretty wide at this point, and most people with a browser will be able to play your game. Especially if you use one of the higher level toolkits like PlayN. You can also do 3D HTML5 games with WebGL, though the platform support for that is still relatively limited (all the PC browsers except IE handle it, but none of the released mobile browsers do last time I checked).

You can also just use an existing highly portable game engine, like Unity3D.

  • \$\begingroup\$ Do you have a source for xna being dead? I agree news and updates have been sparse, so maybe I'm hoping against hope that no news isn't actually bad news for xna. \$\endgroup\$
    – Nate
    Apr 11, 2012 at 5:07
  • \$\begingroup\$ @Note Bross: not one that I can link to, no. I've been told as much though by a number of Microsoft devs. I should probably clarify that it's just hearsay (even if from a reputable source). \$\endgroup\$ Apr 11, 2012 at 5:31
  • \$\begingroup\$ That's the writing on the wall I've seen as well. I was just wondering if you'd found something concrete. That said, have you heard what if any route there will be for managed game dev? \$\endgroup\$
    – Nate
    Apr 11, 2012 at 15:32
  • \$\begingroup\$ @NoteBross: I have not, no. I'll ask some folks in the know; it's a good question. \$\endgroup\$ Apr 11, 2012 at 19:34
  • \$\begingroup\$ Thanks. Porting a game from, say, iOS to Android or even from Windows to either of those is one thing, but it seems that WP7 is on its own island now that Microsoft is being extremely iffy about XNA. Encapsulating rendering is only part of the picture; middleware such as physics engines are mostly tied to certain languages, and they strongly influence the design choices of the game in ways that go beyond simple platform choice. \$\endgroup\$ Apr 12, 2012 at 4:10

If you really want to use XNA as your framework of choice to build your game, you should have a look at MonoGame. Support for 3D is quite new to the framework and probably not ideal, however it would let you write in C# and reuse the vast majority of your code for both platforms (WP7 Marketplace and Windows 8 store). Game are already being submitted to the Windows 8 store using MonoGame!

Saying that, I believe Windows Phone 8 is set to support C/C++ and Directx (not sure on limitations).


Without XNA there will be no games on WP8 and W8 and without games nobody will buy them. So it is better to wait for WP9 and W9 or start learning objective C or Java.

  • 2
    \$\begingroup\$ -1 -- total nonsense. XNA will work on Windows 8 and WP8. The concern is that for the former, it won't be sellable on the store. There's also no need to learn ObjC or Java when C++ is a common game development language that works on Win7, Win8, Android and iOS, and has a game development community just as strong or stronger than XNA/C# or Java. \$\endgroup\$ Jun 7, 2012 at 1:42

You must log in to answer this question.

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