J'ai un gros programme qui se compilait sans problème avec l'IDE mais lorsque je lance le .exe généré la fenêtre de jeu ne répond pas, j'ai essayé de créer un tout petit programme avec le SDL qui simulait juste le rafraichissement d'un rendu et encore une fois la même chose la fenêtre ne répond pas.
Je vous montre le petit programme puisque c'est le même principe:
#include <SDL.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char* argv[]) {
srand(time(NULL));
if (SDL_Init(SDL_INIT_VIDEO) != 0)
{
printf("Échec de l'initialisation de la SDL (%s)\n", SDL_GetError());
return -1;
}
SDL_Window* window = SDL_CreateWindow("Mario bros", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 480, 480, SDL_WINDOW_SHOWN);
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
for (int i = 0; i < 60; i++) {
Uint64 ticks = SDL_GetTicks64();
SDL_SetRenderDrawColor(renderer, rand() % 255, rand() % 255, rand() % 255, 255);
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
while (SDL_GetTicks64() - ticks < 1000);
}
return 1;
}
J'utilise la version 2.26.1 de SDL.
Sur le gros programme j'ai aussi SDL2_Mixer 2.6.2 et SDL_TTF 2.20.1 mais le problème apparaît déjà avec seulement SDL2.
J'utilise l'IDE Visual Studio 2022.
Dans la configuration du projet j'ai ajouté les "includes" les "lib" et les "entry", tout se passe bien sauf au dehors de l'IDE. Si vous avez déjà rencontré ce problème je suis tout ouïe de savoir si vous avez une solution.
Normal, tu dois appeler la fonction SDL_PollEvent ou SDL_WaitEvent (en boucle tant que c'est non vide, dans la plupart des cas ce sera toujours PollEvent) en début de boucle principal car cela est nécessaire selon l'OS pour détecter le bon fonctionnement de ton application (c'est valable sur macOS par exemple).
SDL fait certaines choses en tâche de fond pour répondre avec l'OS cible par conséquent si l'application utilisateur ne dépile pas ces évènements, l'OS croit que l'application ne répond pas.
- Edité par markand 2 janvier 2023 à 16:43:35
git is great because Linus did it, mercurial is better because he didn't.
Sur le principe si j'ai bien compris c'est comme si il pense que le "jeu" est en pause et il ne fait rien.
Non, l'OS détecte que le processus ne répond pas à ses sollicitations (laisse les évènements s'empiler par exemple), et génère une alerte. Un jeux en pause, traite toujours les évènements (réponse à l'OS), la réponse qu'il donne à l'utilisateur donne l'illusion qu'il ne se passe rien.
Sur le principe si j'ai bien compris c'est comme si il pense que le "jeu" est en pause et il ne fait rien.
Un jeux en pause, traite toujours les évènements (réponse à l'OS), la réponse qu'il donne à l'utilisateur donne l'illusion qu'il ne se passe rien.
Exact. D'ailleurs la plupart des jeux en pause vont simplement annuler la mise à jour des objets du jeu mais continuer à les dessiner à une fréquence précise. C'est par exemple comme ça que tu peux continuer à faire tourner des pièces dans un mario alors que les entités ne bougent plus. Le jeu est en pause mais il parait pas comme « figé ».
git is great because Linus did it, mercurial is better because he didn't.
SDL2 | Ne répond pas
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
git is great because Linus did it, mercurial is better because he didn't.
git is great because Linus did it, mercurial is better because he didn't.