C++ et SDL: Comment SDL_Rect travail exactement?
Je travaille sur quelques SDL trucs et j'ai rencontré quelques difficultés lors de la tentative de définir l'emplacement d'un chargé BMP.
Voici le code.
while(event.type != SDL_QUIT) //The game loop that does everything
{
SDL_Rect *location;
location = SDL_Rect(600,400,0,0);
SDL_PollEvent(&event); //This "polls" the event
//Drawing stuff goes here
SDL_BlitSurface(zombie, NULL, buffer, &location);
SDL_Flip(buffer); //Draw
}
Il ne compile pas. Ce que je fais mal?
OriginalL'auteur Lemmons | 2010-10-14
Vous devez vous connecter pour publier un commentaire.
SDL est écrit en C, afin de
SDL_Rect
est juste une simple structure.Pour allouer dynamiquement de ce que vous auriez à utiliser
new
sinon le compilateur va interpréter votre code comme un appel à une fonction régulière appeléSDL_Rect
qui renvoie unSDL_Rect*
.Dans ce cas, je ne vois aucune raison de l'utilisation de la dynamique de l'allocation; il suffit d'utiliser la structure de la syntaxe d'initialisation (et faites attention à l'ordre de déclaration de la structure des membres):
ou explicitement initialiser chacun de ses membres (plus sûr dans le cas où quelqu'un décide de re-arange l'ordre de la structure des membres):
Par ailleurs, depuis C++11 est le premier exemple peut être réécrit comme
SDL_Rect location{0,0,600,400};
OriginalL'auteur Eugen Constantin Dinca
Comme une alternative à la réponse ci-dessus, si, pour une raison quelconque, vous avez besoin pour créer dynamiquement
location
, vous devez faire comme ceci:Noter que, en raison supplémentaire
SDL_Rect
sera créé à chaque itération de la boucle, et il cessera d'être un pointeur sur la prochaine itération, il est nécessaire de le supprimer avant la fin de la boucle (en d'autres termes, pour supprimer avant la fin de chaque itération). Sinon, vous créez une fuite de mémoire.Comme une alternative supplémentaire, si vous avez besoin des modifications à
location
persister d'une itération de la boucle à l'autre, ou si vous n'avez pas besoin de changement à l'intérieur de la boucle à tous, mais vous avez voulu nettoyer votre coda un peu, vous pourriez faire quelque chose comme ceci:OriginalL'auteur Brendon Dodd