私はSDL2を掘り下げようとしています。これまで私は以下の簡単なプログラムを作りました。それは画面に長方形をレンダリングし、色を急に変えさせるだけです。新しい色の各レンダリングの間に2番目の遅延が生じる原因は何ですか?
game.h
#include<SDL2/SDL.h>
#include<stdbool.h>
typedef struct Game {
bool finished;
SDL_Event curevent;
SDL_Window* mainwin;
SDL_Renderer* mainren;
}Game;
Game *initGame();
void destoryGame(Game*);
void drawRect(Game*);
void handleEvents(Game*);
game.c
#include<SDL2/SDL.h>
#include<malloc.h>
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#include"game.h"
Game *initGame() {
Game *game = NULL;
if(SDL_Init(SDL_INIT_VIDEO) < 0) {
fprintf(stderr,"Error: %s",SDL_GetError());
} else {
game = malloc(sizeof(Game));
game->finished = false;
game->mainwin = SDL_CreateWindow("Main Window",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
800, 640,
SDL_WINDOW_RESIZABLE);
if(game->mainwin == NULL) {
fprintf(stderr,"Error: %s",SDL_GetError());
} else {
game->mainren = SDL_CreateRenderer(game->mainwin, -1,
SDL_RENDERER_ACCELERATED);
if(game->mainren == NULL) {
fprintf(stderr,"Error: %s",SDL_GetError());
} else {
SDL_SetRenderDrawColor(game->mainren,0,0,0,0xFF);
SDL_RenderClear(game->mainren);
}
}
}
return game;
}
void destoryGame(Game *game) {
free(game);
SDL_Quit();
printf("Exiting ...\n");
}
void handleEvents(Game *game) {
while(SDL_PollEvent(&(game->curevent)) != 0) {
if(game->curevent.type == SDL_QUIT) {
game->finished = true;
}
}
}
void drawRect(Game *game) {
int r, b, g, h, w;
srand(time(NULL));
r = rand() % 0xFF + 1;
b = rand() % 0xFF + 1;
g = rand() % 0xFF + 1;
SDL_GetWindowSize(game->mainwin,&h,&w);
SDL_Rect rect = {h/4,w/4,h/2,h/2};
SDL_SetRenderDrawColor(game->mainren,r,b,g,0xFF);
SDL_RenderFillRect(game->mainren, &rect);
SDL_RenderPresent(game->mainren);
}
main.cの
#include"game.h"
int main() {
Game* game = initGame();
do {
handleEvents(game);
drawRect(game);
} while((game->finished != true));
destoryGame(game);
return 0;
}
私は、Linuxシステム上でです。 Ubuntu 16.04。そしてコンパイルしています:
SRC_FILES = ./src/main.c ./src/game.c
CC_FLAGS = -Wall -Wextra -Os -g -lSDL2 -std=gnu11
CC = gcc
all:
${CC} ${SRC_FILES} -o game ${CC_FLAGS}
このプログラムは問題なくコンパイルされ実行されます。各新色間の秒の遅延があり、なぜ私が疑問に思って
:アウトプットは次のようになりますか?
直感は、ループが繰り返されるたびに新しい色があることを教えてくれます。それは何百回もあるはずです。この遅延を引き起こしている何
https://youtu.be/AjbrmfjJRk0?t=6m3s
:たぶん、このような何かを探していますか?あるいは、コードに関する何かを理解できないのですが、コードを正確に実行する必要がありますか?
関数: 'srand()'はプログラムの実行全体に対して一度だけ呼び出されるべきであり、いくつかの乱数が必要とされるたびに呼び出されるべきではありません。 'main()'の最初のコード行に 'srand()'を呼び出すようにしてください。 – user3629249