In the 4 months since I started using XNA and learning C# I’ve come a long way. I’m about to release my first XBLIG, Piz-ong, and it’s a great feeling. Is it an amazing game that’s going to forever shape the industry? No, It’s a Pong clone. But it’s a personal accomplishment that really laid the groundwork for my education and confidence in making games.
Along the way I’ve gathered a few lessons and a bit of knowledge that I wanted to pass along to others.
I feel bad for the people who follow me on twitter. I’m always running into problems, and thus always asking for help. I also have no shame, so it balances things out. It’s comforting to know that there are a number of people out there willing to take their valuable time and assist you, and the best way to do that is to find a community and get active in it.
I’ve been vocal proponent for XNA and XBLIG for some time now, and dove in head first when it came to learning XNA. That also meant extending myself out to other developers, in terms of helping them network, cover their games, or even provide a pointer or two when I could. In return, I’ve found a community who was always willing to do the same for me. You get what you give, right?
When asking for help it is essential that you are clear about not only what you are looking for, but that you’ve also exhausted all avenues when trying to pursue the answer. I make a point of illustrating what I’ve done to put myself in a given situation, and some of the resources I’ve addressed to resolve it. Generally, I post a brief comment on my situation into a site like PasteBin.com, along with the applicable code. Afterward, I tweet what my issue is, along with that link, and find that the XNA community as a whole was always willing to assist me. I suggest you do the same.
We’d all like to believe that we can program the artistic equivalent of the Mona Lisa in only a brief stretch of time, but the fact of the matter remains; even the simplest of problems can hang us up for days. It is for this reason alone that I suggest starting small.
Ian Stocker prompted me to start with making a pong game. While this was certainly a step back from the work I was doing in Unreal, it was also an excellent starting point which also grounds you. His main argument was that it would teach me the basics of not only game design, but also that of a new programming language and framework.
Boy was he right. With little programming knowledge, I really had my work cut out for me. By working with the basics however, it allowed me to make progress and reward myself without ever embracing that hopeless, sinking feeling when you realize you’ve bitten off more than you can chew.
Don’t be afraid to challenge yourself
When I was getting bored with the basics of pong I decided to add a powerup system. It was rough starting off, but fortunately Jim Perry was there to help me, and basically wrote the whole thing himself. Now, this isn’t always a terrible thing, because like I mentioned above, I had exhausted all of my avenues in terms of research, and by witnessing a framework that was built specifically for my application I could really visualize how it worked.
Moreover, I learned an entirely new concept in C#: Subscribing to events. I couldn’t quite grasp this concept on my own, but after looking over his code in detail it soon became more clear. Additionally, it allowed me to understand the Game State Management sample, which is responsible for sorting throughout the various screens. It’s also important to find a challenge as it again curbs the boredom that eventually sets in while allowing you to learn something completely new.
Find someone willing to take you under their wing
I was fortunate to have Jim Perry, an XNA MVP, who would donate quite a bit of his free time toward my education. In situations where I found myself stuck, he was always there to lend a hand. That’s a comforting feeling for a beginner, and really lends confidence so that I could pursue things that I initially believed to be over my head.
If you’re fortunate enough to find someone kind enough to do the same, then you my friend, can learn exponentially faster.
There were others in the community who spent quite a bit of time on my education as well. Charles Humphrey wrote an entire particle engine and tutorial to get me started with particles! While in the end I wound up using the Mercury Particle Engine, I wound have never been able to implement it without the base knowledge I gathered from his tools.
Additionally, seeing how a professional crafts their code, or more specifically, architects their framework, can prove invaluable too. This not only reinforces a lot of what you already know, but also illustrates how you can make improvements to your own code.
Pay it forward
While I may not have any code knowledge that I can pass along to any of those who helped me out along the way, it’s only fair that I find some way to pay back what I’ve received; that’s how great communities thrive. You can do this any number of ways.
If I find a useful website or educational resource, especially one with a premium fee attached to it, pass along the good word if you enjoyed it. People are naturally hesitant to fork over their hard earned money for things they aren’t sure of, so by confirming whether or not you found use in something is a great way to move people toward a resource.
Personally, I found DigitalTutors.com and 3DBuzz.com to be outstanding in terms of videos, communities, and training lessons. Both require a fee of some sort to have full access to their content, but as someone who has been using both, I’ve received far more value from these two sites than I have for the measly fees they charge. I say this as a novice developer who was eager to find resources to assist my education – they both offer free lessons too, covering a variety game development tools, so give it a try.
There’s a number of ways to seek help
It’s inevitable that you’ll find yourself stuck at some point in your coding career. This was happening on a daily basis for me at first (and often still does!). With that in mind, it’s great to know that there are active communities to pursue where you can find answers to your problem. And let’s be clear about this: Anything that you want to do, somebody else has already done, and was also stuck at some point.
StackOverflow.com is my go-to forum for all things coding. They’ve crafted a great social experience on there that rewards you for helping others, and overall I’ve found everyone on there to be not only helpful, but friendly. Moreover, forums are broken up by category (Game Dev), and can even be tagged by language/framework, thereby making it easy to not only find answers, but also for people to quickly and easily answer your questions.
Most game engines/frameworks have their own forums as well. While Microsoft’s App Hub, the official forum for XNA developers, is a bit quiet these days, it still hosts a plethora question + answer dialogue from others, in addition to several tutorials. Here’s to hoping Microsoft finally fixes the broken links after they changed the App Hub a few weeks ago. (note: You can usually add “Xbox” before most links in the forums and it will direct you to the correct thread)