XianForce wrote:
Subscribed =D. And How good is that book? I just recently ordered a book by John Harbour called Beginning Game Development, someone recommended it to me to learn DirectX. I was considering buying that book, so I'd love to know what you think of it =p.
I had actually heard of the game before, but have never played it myself. I'm exciting to see how your project turns out, so I can try it myself =D.
I really like the book at it shows what's goes into a game engine, while using DirectX 9.0c. This book will NOT teach you directx, lua, STL, c/c++, but will give references to other books to further go into said topics. The whole 1st 2 chapters just dives into so much code before explaining one bit of the why and it assumes that you have a decent background in C/C++. That's why I like the book... I know my basics, i don't need another book explaining how/why to use a For loop, I just needed something to show me how to put it all to good use and that's what this does.
So again, it's not going to hold your hand through any of these topics, but merely teach you how to use it in a reusable engine for 2D projects. I do recommend it, Jonathan Harbour was a teacher of mine before I ran out of money to finish school, so I am used to his style of teaching which is usually to throw a bunch at you, wait for you to catch up, explain bits here and there then teach you something new while showing you a more efficient way to do what you previously learned. Which means, the first chapter with an example on how to display a sprite won't/shouldn't be the way you actually display a sprite by the end of the book as so much more is added. Here's the book's Table of Contents to give you a taste of what it has:
Chapter 1 Building a 2D Game Engine . . . . . . . . . . . . . . . . . . . . . . . 1
Compiler Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
DirectX SDK Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Why Do We Need an Engine? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Creating the Engine Project. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Dev-Cþþ Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Visual Cþþ Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Engine Source Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Compiling the Engine Project . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Testing the Engine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
The TestEngine Source Code. . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Dev-Cþþ Library Test Project . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Visual Cþþ Library Test Project. . . . . . . . . . . . . . . . . . . . . . . . . 38
Chapter 2 3D Rendering. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Rendering Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Adding Rendering Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Adding Camera Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Adding Mesh Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Rendering Meshes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Runtime Cubes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Bouncing Balls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Direct Lighting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Directional Light . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Spot Light . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Point Light. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Creating Lights. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Chapter 3 2D Rendering. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Basic 2D Rendering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Raising Happy Sprites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Creating Vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Testing Vector3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Creating a Reusable Sprite Class . . . . . . . . . . . . . . . . . . . . . . . . 85
Rendering Sprites with Transparency . . . . . . . . . . . . . . . . . . . . . . . 92
Color Key Transparency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Alpha Channel Transparency . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Chapter 4 Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Animation Demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Sprite Rotation and Scaling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Animation with Transforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Particles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Chapter 5 Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Keyboard Input. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
DirectInput Device . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Initializing the Keyboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Reading Key Presses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Mouse Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Initializing the Mouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Reading the Mouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Engine Modifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Input Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Engine Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Testing Keyboard and Mouse Input . . . . . . . . . . . . . . . . . . . . . . . 134
Chapter 6 Audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Designing an Audio System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
What Is FMOD? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Using the FMOD SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Audio Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Sample Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Audio Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Adding FMOD to the Game Engine . . . . . . . . . . . . . . . . . . . . . . . 148
Audio Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Chapter 7 Entities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Building an Entity Manager. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
The Entity Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Modifying the Engine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Modifying the Sprite Class . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Testing Sprites as Entities . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Modifying the Mesh Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Testing Meshes as Entities . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Chapter 8 Fonts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Creating a Font. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Loading and Rendering a Font . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Font Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Using the New Font Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Chapter 9 Physics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Collision Detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Automated Collision Detection . . . . . . . . . . . . . . . . . . . . . . . . 186
Bounding Rectangle Collision Test . . . . . . . . . . . . . . . . . . . . . 192
Distance-Based Collision Test . . . . . . . . . . . . . . . . . . . . . . . . . 204
Chapter 10 Math . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Math Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Math Class Header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Math Class Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Math Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Linear Velocity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Angle to Target . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Drop-Down Console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Console Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Console Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Chapter 11 Threading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Introducing the POSIX Threads Library. . . . . . . . . . . . . . . . . . . . . 243
Installing POSIX Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Using POSIX Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Programming POSIX Threads . . . . . . . . . . . . . . . . . . . . . . . . . 248
ThreadDemo Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
Threading the Game Engine . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Threaded Garbage Collection . . . . . . . . . . . . . . . . . . . . . . . . . 262
Testing the Newly Threaded Engine . . . . . . . . . . . . . . . . . . . . 264
Chapter 12 Scripting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Introducing Lua . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Running Lua from the Command Prompt . . . . . . . . . . . . . . . . 272
Lua and Cþþ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Lua Script Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
Linking with the Lua Library. . . . . . . . . . . . . . . . . . . . . . . . . . 291
Script Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
Chapter 13 Games . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Scrolling Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
Blocks Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
Alien Invaders. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Epilogue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307