Ignore the people who tell you not to start with C/C++ . I took this advice and regretted it. Learn it right from the start.
There are basically only two concepts you will ever make use of in practical programming (functional languages don't count): iteration and conditionals. It doesn't matter what language you use, the meat of any solution to any problem is going amount to checking conditions and doing things over and over.
The flexibility afforded by scripting/interpreted languages is just not worth it; for a good portion of common tasks they will be literally hundreds of times slower and they complicate debugging of runtime errors by an order of magnitude. I learned python and perl first and ran into bottlenecks almost immediately drawing a few dozen sprites, and developed some truly bad habits.
Too much emphasis is placed on learning advanced OO design patterns too early. Stick with simple structs for data encapsulation with getter-setter methods and avoid the trap of learning about templates/selective inheritance/v-tables/function objects/etc. before you need them (if ever). It's always better to build something ugly that works than something elegant that you can't debug. If you need something that's not in the STL, then make it as simple as possible and test it before letting everything hang on it.
DO use external libraries whenever possible. If you start by trying to write image/audio loading code yourself you will likely get frustrated and quit before getting anywhere.
SFML is an excellent tool to start with as it takes care of resource loading, has basically every base object/class you need to get a 2D game up and running, and provides a nice (the nicest imo) OpenGL rendering context and allows you to phase out built in functionality gradually if you decide to get into 3d programming. Most crucially, unlike most 'game-builder' type tools, you will be writing in C/C++ so everything you learn will be useful and (with modification) be usable later.
If you just want to have fun making simple projects that may be all you ever need.
Learning modern 3D programming is pretty tough to start. Performing tranformations and lighting using shaders is just not intuitive at all and you'll probably have to kind of fake it till' you make it. As far as I know there is no definitive book on the subject which manages to be example based and platform independent.
Here are two websites I have used a bunch:
This website provides an incremental path to understanding fully modern game programming using OpenGL, provided you are willing to learn some elementary linear algebra (which you'll have to do anyway). So does this one. The ideas can be applied to Direct3D also although I am a serious amateur when it comes to HLSL and DirectX.
General advice:
Never walk away from a program which doesn't compile. You will wind up with a mountain of sketches of programs you don't understand any more and will have a hard time moving forward.
Set very simple goals for yourself and set deadlines. My first project was a remake of Tennis which wound up taking more than a week, but I came up against some version of every common problem I have ever experienced and overcame/hacked my way through it. Maybe pick a simple game you enjoy and start with that?
Log in to comment