SDL  2.0
testspriteminimal.c File Reference
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include "SDL.h"
+ Include dependency graph for testspriteminimal.c:

Go to the source code of this file.

Macros

#define WINDOW_WIDTH   640
#define WINDOW_HEIGHT   480
#define NUM_SPRITES   100
#define MAX_SPEED   1

Functions

static void quit (int rc)
int LoadSprite (char *file, SDL_Renderer *renderer)
void MoveSprites (SDL_Renderer *renderer, SDL_Texture *sprite)
void loop ()
int main (int argc, char *argv[])

Variables

static SDL_Texturesprite
static SDL_Rect positions [NUM_SPRITES]
static SDL_Rect velocities [NUM_SPRITES]
static int sprite_w
static int sprite_h
SDL_Rendererrenderer
int done

Macro Definition Documentation

#define MAX_SPEED   1

Definition at line 27 of file testspriteminimal.c.

Referenced by main().

#define NUM_SPRITES   100

Definition at line 26 of file testspriteminimal.c.

Referenced by main(), and MoveSprites().

#define WINDOW_HEIGHT   480

Definition at line 25 of file testspriteminimal.c.

Referenced by main(), and MoveSprites().

#define WINDOW_WIDTH   640

Definition at line 24 of file testspriteminimal.c.

Referenced by main(), and MoveSprites().

Function Documentation

int LoadSprite ( char *  file,
SDL_Renderer renderer 
)

Definition at line 45 of file testspriteminimal.c.

References SDL_PixelFormat::BitsPerPixel, SDL_Surface::format, SDL_Surface::h, NULL, SDL_PixelFormat::palette, SDL_Surface::pixels, SDL_CreateTextureFromSurface, SDL_FreeSurface, SDL_GetError, SDL_LoadBMP, SDL_LOG_CATEGORY_APPLICATION, SDL_LogError, SDL_SetColorKey, SDL_TRUE, sprite_h, sprite_w, and SDL_Surface::w.

{
SDL_Surface *temp;
/* Load the sprite image */
temp = SDL_LoadBMP(file);
if (temp == NULL) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s\n", file, SDL_GetError());
return (-1);
}
sprite_w = temp->w;
sprite_h = temp->h;
/* Set transparent pixel as the pixel at (0,0) */
if (temp->format->palette) {
SDL_SetColorKey(temp, SDL_TRUE, *(Uint8 *) temp->pixels);
} else {
switch (temp->format->BitsPerPixel) {
case 15:
(*(Uint16 *) temp->pixels) & 0x00007FFF);
break;
case 16:
SDL_SetColorKey(temp, SDL_TRUE, *(Uint16 *) temp->pixels);
break;
case 24:
(*(Uint32 *) temp->pixels) & 0x00FFFFFF);
break;
case 32:
SDL_SetColorKey(temp, SDL_TRUE, *(Uint32 *) temp->pixels);
break;
}
}
/* Create textures from the image */
if (!sprite) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture: %s\n", SDL_GetError());
return (-1);
}
/* We're ready to roll. :) */
return (0);
}
void loop ( )

Definition at line 128 of file testspriteminimal.c.

References done, MoveSprites(), SDL_KEYDOWN, SDL_PollEvent, SDL_QUIT, and SDL_Event::type.

{
/* Check for events */
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT || event.type == SDL_KEYDOWN) {
done = 1;
}
}
#ifdef __EMSCRIPTEN__
if (done) {
emscripten_cancel_main_loop();
}
#endif
}
int main ( int  argc,
char *  argv[] 
)

Definition at line 147 of file testspriteminimal.c.

References done, SDL_Rect::h, i, LoadSprite(), loop(), MAX_SPEED, NULL, NUM_SPRITES, quit(), SDL_CreateWindowAndRenderer, SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, SDL_LogSetPriority, sprite_h, sprite_w, SDL_Rect::w, WINDOW_HEIGHT, WINDOW_WIDTH, SDL_Rect::x, and SDL_Rect::y.

{
int i;
/* Enable standard application logging */
quit(2);
}
if (LoadSprite("icon.bmp", renderer) < 0) {
quit(2);
}
/* Initialize the sprite positions */
srand(time(NULL));
for (i = 0; i < NUM_SPRITES; ++i) {
positions[i].x = rand() % (WINDOW_WIDTH - sprite_w);
positions[i].y = rand() % (WINDOW_HEIGHT - sprite_h);
velocities[i].x = 0;
velocities[i].y = 0;
while (!velocities[i].x && !velocities[i].y) {
velocities[i].x = (rand() % (MAX_SPEED * 2 + 1)) - MAX_SPEED;
velocities[i].y = (rand() % (MAX_SPEED * 2 + 1)) - MAX_SPEED;
}
}
/* Main render loop */
done = 0;
#ifdef __EMSCRIPTEN__
emscripten_set_main_loop(loop, 0, 1);
#else
while (!done) {
loop();
}
#endif
quit(0);
return 0; /* to prevent compiler warning */
}
void MoveSprites ( SDL_Renderer renderer,
SDL_Texture sprite 
)

Definition at line 94 of file testspriteminimal.c.

References i, NULL, NUM_SPRITES, SDL_RenderClear, SDL_RenderCopy, SDL_RenderPresent, SDL_SetRenderDrawColor, sprite_h, sprite_w, window_h, WINDOW_HEIGHT, window_w, WINDOW_WIDTH, SDL_Rect::x, and SDL_Rect::y.

{
int i;
SDL_Rect *position, *velocity;
/* Draw a gray background */
SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF);
SDL_RenderClear(renderer);
/* Move the sprite, bounce at the wall, and draw */
for (i = 0; i < NUM_SPRITES; ++i) {
position = &positions[i];
velocity = &velocities[i];
position->x += velocity->x;
if ((position->x < 0) || (position->x >= (window_w - sprite_w))) {
velocity->x = -velocity->x;
position->x += velocity->x;
}
position->y += velocity->y;
if ((position->y < 0) || (position->y >= (window_h - sprite_h))) {
velocity->y = -velocity->y;
position->y += velocity->y;
}
/* Blit the sprite onto the screen */
SDL_RenderCopy(renderer, sprite, NULL, position);
}
/* Update the screen! */
SDL_RenderPresent(renderer);
}
static void quit ( int  rc)
static

Definition at line 39 of file testspriteminimal.c.

{
exit(rc);
}

Variable Documentation

int done

Definition at line 35 of file testspriteminimal.c.

SDL_Rect positions[NUM_SPRITES]
static

Definition at line 30 of file testspriteminimal.c.

SDL_Renderer* renderer

Definition at line 34 of file testspriteminimal.c.

SDL_Texture* sprite
static

Definition at line 29 of file testspriteminimal.c.

Referenced by LoadSprite(), and main().

int sprite_h
static

Definition at line 32 of file testspriteminimal.c.

Referenced by LoadSprite(), main(), and MoveSprites().

int sprite_w
static

Definition at line 32 of file testspriteminimal.c.

Referenced by LoadSprite(), main(), and MoveSprites().

SDL_Rect velocities[NUM_SPRITES]
static

Definition at line 31 of file testspriteminimal.c.