Skip to content

Instantly share code, notes, and snippets.

@jrdmcgr
Created October 31, 2013 16:49
Show Gist options
  • Select an option

  • Save jrdmcgr/7253017 to your computer and use it in GitHub Desktop.

Select an option

Save jrdmcgr/7253017 to your computer and use it in GitHub Desktop.
Move a red square around with the arrow keys.
#include "SDL2/SDL.h"
#include <stdio.h>
void clear(SDL_Renderer * renderer) {
SDL_SetRenderDrawColor(renderer, 0, 0, 255, 255);
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
}
void draw(SDL_Renderer * renderer, SDL_Rect * rect) {
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
SDL_RenderFillRect(renderer, rect);
SDL_RenderPresent(renderer);
}
int main(int argc, char* argv[]) {
SDL_Window *window;
SDL_Renderer *renderer;
SDL_Init(SDL_INIT_VIDEO);
window = SDL_CreateWindow(
"An SDL2 window",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
640,
480,
SDL_WINDOW_OPENGL
);
if (window == NULL) {
printf("Could not create window: %s\n", SDL_GetError());
return 1;
}
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
if (renderer == NULL) {
printf("Could not create window: %s\n", SDL_GetError());
return 1;
}
SDL_Rect rectangle = {
.x = 10,
.y = 10,
.w = 10,
.h = 10
};
clear(renderer);
int quit = 0;
while (!quit) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
if (event.type == SDL_KEYDOWN) {
// Handle arrow keys
switch(event.key.keysym.scancode) {
case SDL_SCANCODE_LEFT:
rectangle.x -= 10;
break;
case SDL_SCANCODE_RIGHT:
rectangle.x +=10;
break;
case SDL_SCANCODE_UP:
rectangle.y -= 10;
break;
case SDL_SCANCODE_DOWN:
rectangle.y += 10;
break;
default:
break;
}
} else if (event.type == SDL_QUIT) {
quit = 1;
puts("QUIT!");
break;
}
}
clear(renderer);
draw(renderer, &rectangle);
}
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
@Lagertonne

Copy link
Copy Markdown

Do you have any solution against the flickering square?

@Rtizie

Rtizie commented Dec 23, 2020

Copy link
Copy Markdown

Do you have any solution against the flickering square?

Problem is about that rendering. Just 'draw' it every time when you change rectangle.x or y

@syed-ahmed42

Copy link
Copy Markdown

Flickering was fixed after changing the clear function to call RenderPresent before RenderClear.

@arkdracco

Copy link
Copy Markdown

Quero passar este repositório para meu android para testar sua funcionalidade no meu app Cxx, posso?

@AngeloGalav

AngeloGalav commented Nov 8, 2023

Copy link
Copy Markdown

The SDL_RenderPresent(renderer); call at line 8 causes the square to flicker. By removing that line, the flickering is also gone.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment