Hello everybody! (in a fake Simpsons Doctor voice)
I guess it is time for me to share some nuggets of wisdom about 2d game development in XNA. I'm saying 2D because I primarily work with 2D games, and going into 3D goes through a whole new set of tips. Although I am sure some of these can apply to alot of 3D based games as well.
So here goes the tips!
1. Simplify your particles. I know this might sound stupid, but most 2D games don't need 1000 particles swimming around the screen, this effect can be done with just 1 sprite. Have it scale, alpha, and rotate to achieve around 90% of the effect with just 1 draw call! I really don't see a need for complicated particle systems because the user usually won't perceive this as just 1 sprite being scaled. Hopefully the user is too busy enjoying your game to notice that you cheated and only have 1 particle displaying instead of 1000.
2. Pool your objects! Nothing drags a game slower than having to load content each time you want to spawn a enemy. This is all fine and dandy on the PC because of the sophisticated Garbage Collection the full .net CLR has. Pooling can be a pain in the butt if you have multiple objects not residing in the same inheritance hierarchy that means creating even more objects!
3. Keep it simple. The less you have to call in your update functions the faster your game runs. Remember players will probably not notice very subtle and complex interactions in your game. So if you program your game keeping in mind what the player actually perceives then most of the time it will come out simpler.
4. Preload all your content if you can. Hitting the harddrive in the middle of a gaming session to load up a texture is generally a bad idea. So you probably want to load up your sounds, and textures at the loading level so you never hit the hard drive.
5. Test early, and test often on your target platform. Since the PC version of the CLR has better performance than the mobile and xbox versions it is really important that you deploy to those target platforms and check for performance issues. Better to catch them early than late in the game where it might seriously threaten your game shipping in time.
That is what I learned from working on the Xbox 360 and Windows Phone 7.!