Book Image

SDL Game Development

By : Shaun Mitchell
5 (1)
Book Image

SDL Game Development

5 (1)
By: Shaun Mitchell

Overview of this book

SDL 2.0 is the latest release of the popular Simple DirectMedia Layer API, which is designed to make life easier for C++ developers, allowing you simple low-level access to various multiplatform audio, graphics, and input devices.SDL Game Development guides you through creating your first 2D game using SDL and C++. It takes a clear and practical approach to SDL game development, ensuring that the focus remains on creating awesome games.Starting with the installation and setup of SDL, you will quickly become familiar with useful SDL features, covering sprites, state management, and OOP, leading to a reusable framework that is extendable for your own games. SDL Game Development culminates in the development of two exciting action games that utilize the created framework along with tips to improve the framework.
Table of Contents (16 chapters)
SDL Game Development
Credits
About the Author
About the Reviewers
www.PacktPub.com
Preface
Index

Index

A

  • abstract base classes
    • using / Using abstract base classes
  • Alien Attack game
    • sound SDL_mixer extension, using / Using the SDL_mixer extension for sound
    • basic objects, setting up / Setting up the basic game objects
    • bullets, handling / Handling bullets
    • collisions, dealing with / Dealing with collisions
    • tips / Possible improvements
  • AnimatedGraphic class / Creating the game over state, Loading the game over state

B

  • Base64 decoder / Parsing a tile layer
  • base64 encoding / Getting familiar with the Tiled application
  • basic game objects
    • setting up / Setting up the basic game objects
    • GameObject base class / GameObject revamped
    • SDLGameObject class, renaming to ShooterObject / SDLGameObject is now ShooterObject
    • player object / Player inherits from ShooterObject
    • enemy types / Lots of enemy types
    • scrolling background, adding / Adding a scrolling background
  • boolfullscreen parameter / Fullscreen SDL
  • Bullet class / No more bullets or bullet collisions
  • BulletHandler class / The BulletHandler class
  • bullet handling
    • scrolling background, adding / Handling bullets
    • types / Two types of bullets
    • BulletHandler class / The BulletHandler class

C

  • C++11 standard / GameObject revamped
  • camera-controlled map / Camera-controlled map
  • Camera class / The Camera class
  • checkCollideTile function / ShooterObject is now PlatformerObject
  • checkEnemyPlayerBulletCollision functions / Creating a CollisionManager class
  • checkPlayerEnemyCollision functions / Creating a CollisionManager class
  • clean function / What does this code do?
  • CollisionManager Class / Creating a CollisionManager class
  • collisions
    • dealing with / Dealing with collisions, Creating a CollisionManager class
    • CollisionManager Class, creating / Creating a CollisionManager class
  • CollisonManager class / No more bullets or bullet collisions
  • Conan the Caveman game
    • basic game objects, setting up / Setting up the basic game objects
    • bullet collisions / No more bullets or bullet collisions
    • game objects / Game objects and map collisions
    • map collisions / Game objects and map collisions
    • ShooterObject, renaming as PlatformerObject / ShooterObject is now PlatformerObject
    • Camera class / The Camera class
    • camera-controlled map / Camera-controlled map
    • Player class / The Player class
    • additions / Possible additions

D

  • destination rectangle
    • about / Source and destination rectangles
    • sprite sheet, animating / Animating a sprite sheet
    • images, flipping / Flipping images
  • draw function / Creating the texture manager, Putting it all together, The BulletHandler class

E

  • Enter key / Implementing FSM
  • enum attribute / Using mouse button events

F

  • FPS
    • about / Creating fixed frames per second
  • FSM
    • about / Implementing finite state machines
    • implementing / Implementing finite state machines, Implementing FSM
    • game states, base class / A base class for game states

G

  • game
    • structure / What makes up a game
    • Hello SDL code, breaking up / Breaking up the Hello SDL code
    • code, functioning / What does this code do?
  • Game**getGameHeight functions / Drawing the map
  • Game**getGameWidth / Drawing the map
  • Game**handleEvents function / Implementing FSM
  • Game**init function / Initializing joysticks, Implementing FSM
  • Game**setCurrentLevel function / Player inherits from ShooterObject
  • Game class
    • about / The Game class
    • fullscreen SDL / Fullscreen SDL
    / Using texture manager as a singleton
  • GameObject* class / Creating the game over state
  • GameObject class / Using inheritance
  • GameObject classes
    • altering / Fitting the factory into the framework
  • game objects
    • steps, sumarizing / Putting it all together
  • game objects movement
    • setting up / Setting up game objects for movement
    • Cartesian coordinate system / Setting up game objects for movement
    • vector / What is a vector?
    • Vector2D class, adding / Adding the Vector2D class
    • velocity, adding / Adding velocity
    • acceleration, adding / Adding acceleration
  • game over state
    • loading / Loading the game over state
  • GameOverState class / Creating the game over state
  • gamepad input
    • about / Handling joystick/gamepad input
  • GameState.h / A base class for game states
  • game states
    • switching ways / A simple way for switching states
  • getButtonState function / Dealing with joystick button input
  • getRenderer function / Putting it all together

H

  • Hello SDL
    • about / Hello SDL
    • overview / An overview of Hello SDL
    • initialisation flags / SDL initialization flags
    • renderer flags / SDL renderer flags

I

  • inheritance
    • about / Using inheritance
    • functionality example / Using inheritance
    • using / Should we always use inheritance?
    • result tips / Could the same thing be achieved with a simpler solution?
    • derived classes / Derived classes should model the "is a" relationship
    • possible performance penalties / Possible performance penalties
  • init function / The Game class
  • initialisation flags, SDL
    • about / SDL initialization flags
    • SDL_INIT_HAPTIC / SDL initialization flags
    • SDL_INIT_AUDIO / SDL initialization flags
    • SDL_INIT_VIDEO / SDL initialization flags
    • SDL_INIT_TIMER / SDL initialization flags
    • SDL_INIT_JOYSTICK / SDL initialization flags
    • SDL_INIT_EVERYTHING / SDL initialization flags
    • SDL_INIT_NOPARACHUTE / SDL initialization flags
  • input handling
    • about / Input handling
    • input handler class, creating / Creating our input handler class
    • joystick / Handling joystick/gamepad input
    • axis movement, handling / Listening for and handling axis movement
    • joystick button input, dealing with / Dealing with joystick button input
    • mouse events, handling / Handling mouse events
    • summary / Wrapping things up
  • Instance function / Using texture manager as a singleton
  • int flags parameter / Fullscreen SDL

J

  • joy parameter / Listening for and handling axis movement
  • joystick button input / Dealing with joystick button input
  • Joystick Control Panel property / SDL joystick events
  • joysticks
    • events / SDL joystick events
    • initializing / Initializing joysticks

L

  • Level class / Parsing and drawing a tile map
  • LevelParser**parseLevel / Dealing with collisions
  • LevelParser class
    • creating / Creating the LevelParser class
  • load function / Loading the game over state, Creating the SoundManager class

M

  • MainMenuState class / Loading the menu state from an XML file, Loading other states from an XML file
  • MenuButton class / Loading the menu state from an XML file
  • MenuState.cpp file / A base class for game states
  • menu states
    • implementing / Implementing menu states
    • fuction parameters / Function pointers and callback functions
    • callback functions / Function pointers and callback functions
    • temporary play state, implementing / Implementing the temporary play state, Pausing the game
    • game over state, creating / Creating the game over state
  • mouse events
    • handling / Handling mouse events
    • button events, handling / Using mouse button events
    • motion events, handling / Handling mouse motion events
    • keyboard input, implementing / Implementing keyboard input
  • m_bCanJump variable / The Player class
  • m_lastSafePos variable / The Player class

O

  • Object Factories
    • about / Implementing Object Factories
    • Distributed Factories, using / Using Distributed Factories
  • Object Layer / Parsing object layers
  • object layers
    • parsing / Parsing object layers
    • ObjectLayer class, developing / Developing the ObjectLayer class
  • onEnter function / Implementing FSM, Creating the game over state, Loading the game over state
  • onExit function / Implementing FSM

P

  • parseLevel function / Creating the LevelParser class, Developing the ObjectLayer class
  • parseObjects function / Parsing states from an XML file, Developing the ObjectLayer class
  • pause state
    • loading / Loading the pause state
  • PauseState.cpp file / Pausing the game
  • Player**update function / Listening for and handling axis movement, The Player class
  • Player**update function / Player inherits from ShooterObject
  • Player class / The Player class
  • playSound or playMusic functions / Creating the SoundManager class
  • play state
    • loading / Loading the play state
  • PlayState class / Creating the game over state
  • polymorphism
    • about / Implementing polymorphism
    • implementing / Implementing polymorphism
  • pState parameter / Implementing FSM

Q

  • Quadtree / Possible improvements
  • quit function / Initializing joysticks

R

  • registerType function / Using Distributed Factories
  • renderer flags, SDL
    • SDL_RENDERER_SOFTWARE / SDL renderer flags
    • SDL_RENDERER_ACCELERATED / SDL renderer flags
    • SDL_RENDERER_PRESENTVSYNC / SDL renderer flags
    • SDL_RENDERER_TARGETTEXTURE / SDL renderer flags
  • render function / A simple way for switching states, Drawing the map
  • RTF / Migrating SDL 1.2 extensions

S

  • ScrollingBackground class / Adding a scrolling background
  • SDL
    • need for / Why use SDL?
    • drawing / Basic SDL drawing
  • SDL 1.2
    • extensions / Migrating SDL 1.2 extensions
  • SDL 1.2 extensions / Migrating SDL 1.2 extensions
    • SDL_image / Migrating SDL 1.2 extensions
    • SDL_net / Migrating SDL 1.2 extensions
    • SDL_mixer / Migrating SDL 1.2 extensions
    • SDL_ttf / Migrating SDL 1.2 extensions
    • SDL_rtf / Migrating SDL 1.2 extensions
  • SDL 2.0
    • about / What is new in SDL 2.0?
    • SDL 1.2 extensions / Migrating SDL 1.2 extensions
  • SDL 2.0 Roadmap / What is new in SDL 2.0?
  • SDL drawing
    • about / Basic SDL drawing
    • images, obtaining / Getting some images
    • texture, creating / Creating an SDL texture
  • SDL joystick events
    • SDL_JoyAxisEvent / SDL joystick events
    • SDL_JoyButtonEvent / SDL joystick events
    • SDL_JoyBallEvent / SDL joystick events
    • SDL_JoyHatEvent / SDL joystick events
    • about / SDL joystick events
  • SDL Mouse Event
    • SDL_MouseButtonEvent / Handling mouse events
    • SDL_MouseMotionEvent / Handling mouse events
    • SDL_MouseWheelEvent / Handling mouse events
  • SDL setup, in Visual C++ Express 2010
    • about / Setting up SDL in Visual C++ Express 2010
    • library, retrieving / Setting up SDL in Visual C++ Express 2010
    • Mercurial, using / Using Mercurial to get SDL 2.0 on Windows
    • SDL 2.0 repository, cloning / Cloning and building the latest SDL 2.0 repository
    • SDL 2.0 repository, building / Cloning and building the latest SDL 2.0 repository
    • linking / I have the library; now what?
  • SDL_CreateRenderer function / An overview of Hello SDL
  • SDL_CreateWindow function / Fullscreen SDL
  • SDL_image
    • installing / Installing SDL_image
    • using / Using SDL_image
  • SDL_INIT_AUDIO flag / SDL initialization flags
  • SDL_INIT_EVERYTHING flag / SDL initialization flags
  • SDL_INIT_HAPTIC flag / SDL initialization flags
  • SDL_INIT_JOYSTICK flag / SDL initialization flags
  • SDL_INIT_NOPARACHUTE flag / SDL initialization flags
  • SDL_INIT_TIMER flag / SDL initialization flags
  • SDL_INIT_VIDEO flag / SDL initialization flags
  • SDL_JOYAXISMOTION event / Listening for and handling axis movement
  • SDL_JoyBallEvent / SDL joystick events
  • SDL_JoyButtonEvent / SDL joystick events
  • SDL_JoyHatEvent / SDL joystick events
  • SDL_MouseButtonEvent / Handling mouse events
  • SDL_MouseMotionEvent / Handling mouse events
  • SDL_MouseWheelEvent / Handling mouse events
  • SDL_RendererFlip value
    • SDL_FLIP_NONE / Flipping images
    • SDL_FLIP_HORIZONTAL / Flipping images
    • SDL_FLIP_VERTICAL / Flipping images
  • SDL_RENDERER_ACCELERATED flag / SDL renderer flags
  • SDL_RENDERER_PRESENTVSYNC flag / SDL renderer flags
  • SDL_RENDERER_SOFTWARE flag / SDL renderer flags
  • SDL_RENDERER_TARGETTEXTURE flag / SDL renderer flags
  • SDL_WasInit() function / SDL initialization flags
  • SDL_WindowFlags function / Fullscreen SDL
  • SDL_WindowFlags functions
    • SDL_WINDOW_FULLSCREEN / Fullscreen SDL
    • SDL_WINDOW_OPENGL / Fullscreen SDL
    • SDL_WINDOW_SHOWN / Fullscreen SDL
    • SDL_WINDOW_HIDDEN / Fullscreen SDL
    • SDL_WINDOW_BORDERLESS / Fullscreen SDL
    • SDL_WINDOW_RESIZABLE / Fullscreen SDL
    • SDL_WINDOW_MINIMIZED / Fullscreen SDL
    • SDL_WINDOW_MAXIMIZED / Fullscreen SDL
    • SDL_WINDOW_INPUT_GRABBED / Fullscreen SDL
    • SDL_WINDOW_INPUT_FOCUS / Fullscreen SDL
    • SDL_WINDOW_MOUSE_FOCUS / Fullscreen SDL
    • SDL_WINDOW_FOREIGN / Fullscreen SDL
  • SDL_WINDOW_BORDERLESS function / Fullscreen SDL
  • SDL_WINDOW_FOREIGN function / Fullscreen SDL
  • SDL_WINDOW_FULLSCREEN flag / Fullscreen SDL
  • SDL_WINDOW_FULLSCREEN function / Fullscreen SDL
  • SDL_WINDOW_HIDDEN function / Fullscreen SDL
  • SDL_WINDOW_INPUT_FOCUS function / Fullscreen SDL
  • SDL_WINDOW_INPUT_GRABBED function / Fullscreen SDL
  • SDL_WINDOW_MAXIMIZED function / Fullscreen SDL
  • SDL_WINDOW_MINIMIZED function / Fullscreen SDL
  • SDL_WINDOW_MOUSE_FOCUS function / Fullscreen SDL
  • SDL_WINDOW_OPENGL function / Fullscreen SDL
  • SDL_WINDOW_RESIZABLE function / Fullscreen SDL
  • SDL_WINDOW_SHOWN function / Fullscreen SDL
  • setCallbacks function / Loading the pause state
  • SoundManager class / Creating the SoundManager class
  • sound SDL_mixer extension
    • using / Using the SDL_mixer extension for sound
    • SoundManager class, creating / Creating the SoundManager class
  • source rectangle
    • about / Source and destination rectangles
    • sprite sheet, animating / Animating a sprite sheet
    • images, flipping / Flipping images
  • states, XML file
    • parsing / Parsing states from an XML file
    • menu state, loading / Loading the menu state from an XML file
    • play state, loading / Loading the play state
    • pause state, loading / Loading the pause state
    • game over state, loading / Loading the game over state

T

  • texture manager
    • about / Creating the texture manager
    • creating / Creating the texture manager
    • using, as singleton / Using texture manager as a singleton
  • TextureManager class / Creating the texture manager
  • Tiled application
    • about / Getting familiar with the Tiled application
  • tile layer
    • parsing / Parsing a tile layer
  • TileLayer class / Camera-controlled map
  • TileLayer update function / Drawing the map
  • tile map
    • about / What is a tile map?
    • parsing / Parsing and drawing a tile map
    • drawing / Parsing and drawing a tile map, Drawing the map
    • TileLayer class, creating / Creating the TileLayer class
    • LevelParser class, creating / Creating the LevelParser class
    • tilesets, parsing / Parsing tilesets
    • tile layer, parsing / Parsing a tile layer
    • scrolling / Scrolling a tile map
  • tilesets
    • parsing / Parsing tilesets
  • TortoiseHg Workbench window / Cloning and building the latest SDL 2.0 repository
  • type function / Creating a CollisionManager class

U

  • uncompress function / Parsing a tile layer
  • update function / Creating the texture manager, Function pointers and callback functions, Creating the game over state, The BulletHandler class

V

  • vector
    • about / What is a vector?
    • using / What is a vector?
    • two vectors, adding / Addition of two vectors
    • muliplying, by scalar number / Multiply by a scalar number
    • subtration methods / Subtraction of two vectors
    • sclar number, dividing by / Divide by a scalar number
    • normalizing / Normalizing a vector
  • Visual C++ Express 2010
    • SDL, setting up / Setting up SDL in Visual C++ Express 2010

X

  • Xbox 360 controller / SDL joystick events
  • XML file
    • states, parsing / Parsing states from an XML file
    • menu state, loading / Loading the menu state from an XML file
    • other states, loading / Loading other states from an XML file
  • XML Files
    • about / Loading XML files
    • basic XML structure / Basic XML structure

Z

  • zlib compression algorithm / Getting familiar with the Tiled application