Currently if you build an XNA game and run it on the WP7 emulator you'll note that once you exit the program, it isn't listed in the main application list like it would be for a Silverlight application. This can make it tough to validate how your icon looks, and makes it impossible to pin it to the emulator's tile-view start screen.
If you're sharing common code between Windows Phone 7 and other platforms in either Silverlight or XNA, then you may run into a need to fork some code based on the platform. This is normally done with a preprocessor directive, which for Windows Phone 7 is WINDOWS_PHONE.
Two weeks ago in my post Pre-Alpha Videos of My Windows Phone 7 Games in Development I posted a short video of a game called 'Hungry Castaway' that I am working on with one of my friends for Windows Phone 7. At that point I had only gotten as far as replicating a concept I had done in Silverlight over to XNA. Now that I've had two weeks to get some work done I wanted to post an updated video.
click here to watch at a larger size
At 0:44 into the clip the video skips ahead to show more hectic gameplay to give an example of how the gameplay scales based on skill. Please keep in mind this game is still early on, so the gameplay in this video likely doesn't reflect the final game.
In my last blog post on XNA for Windows Phone 7 I said that I was working on a game in both Silverlight and XNA, and that if I got a chance to test out performance I would report back. As you can see in the image below, I got a chance to test out my Silverlight game on a real device last week at ReMIX Atlanta - so this post is to cover some insights gained.
me testing my game prototype on a Windows Phone 7 device
First off, if you are trying to get a basic understanding of when to choose between XNA and Silverlight for WP7, you should take a look at this post by Michael Klucher. Michael lays down the basic differences between the two platforms - Silverlight has great controls with great tool support for styling them, and XNA has a crazy fast sprite rendering pipeline which supports full 3D.
But, let's say that you don't need controls for your game, and you don't need 3D - is Silverlight good enough for writing a basic 2D game? After playing with a device briefly last weekend I can tell you the performance of Silverlight on the device looked great - but you will need to analyze the game you're creating a bit before making the ultimate decision.
(click 'read more' to keep reading..)
Update 07/14/2010: With the latest Beta release of the Windows Phone 7 Tools there is now built in support for landscape games in XNA Game Studio 4.0. I just put it into my landscape game and it works great - it even automatically supports both landscape directions. Check out this article for details.
I've been working on a game in Silverlight for Windows Phone 7 (WP7), but I have started thinking I should have gone the XNA route. I am now trying to recreate the game in XNA so that once I can get my hands on a device I can figure out for certain if the Silverlight version can perform as well as the XNA version for what I'm trying to accomplish.
In getting started in XNA it took me a bit to figure out how to draw my sprites and game in the landscape orientation on the phone. I also thought it was a bit tough to add a frame per second counter, something I heavily rely on when developing for Silverlight - this blog entry will show how to accomplish both.
How to create a landscape game in XNA for WP7
Keep in mind that according to this article by Shawn Hargreaves there will eventually be built in support in WP7 for handling the landscape orientation - this solution is just a temporary solution until then. Also, keep in mind that things like the X and Y positions for mouse and touch events will need to be inverted as well to support landscape.
First, we are going to create a RenderTarget2D - this is basically a buffer we are going to render everything to before rendering this buffer to the screen at a 90 degree rotation. We also want to define variables for the width and height of the game window instead of relying on GraphicsDevice.Viewport since we are flipping the X and Y coordinates to make the game landscape.
private RenderTarget2D renderTarget; // what game world is rendered on before being rotated private int GameWindowWidth; // the width of the game window we are rendering to private int GameWindowHeight; // the height of the game window we are rendering to
Setup the GameWindow variables in the Initialize() method:
GameWindowWidth = graphics.GraphicsDevice.Viewport.Height; GameWindowHeight = graphics.GraphicsDevice.Viewport.Width;
Initialize our RenderTarget variable in the LoadContent() method:
renderTarget = new RenderTarget2D(GraphicsDevice, GameWindowWidth, GameWindowHeight, false, SurfaceFormat.Color, DepthFormat.Depth16);
(click 'read more' to keep reading..)