Quelle est la meilleure façon de gérer les événements SDL? Vous avez généralement le:SDL_event liste devient longue et salissante?
while (SDL_PollEvent(&event)) {
//Handles all the events when in the menu screen...
eventsMenu(event);
}
Le problème est, quand vous y aller avec un jeu, il y a habituellement un gâchis d'une liste de contrôles que vous pouvez faire, comme de haut en bas Detetion pour de nombreuses touches différentes. Et je me demande si la méthode que j'utilise est efficace et propre. Ou si je devrais l'approcher différemment ...
J'ai un pointeur de fonction dans le mainLoop, qui peut être assigné pour changer rapidement comment les événements seront manipulés. (Dites que je permute à une autre fonction, et il utilisera ces événements) Cependant, je pense que la liste des événements est désordonnée de toute façon, alors j'ai essayé d'ajouter des régions pour la décomposer. est-ce une bonne idée? Et oui, je veux juste une entrée si je suis sur le bon chemin vers un code lisible.
void Window::eventsMenu(SDL_Event event) {
switch (event.type) {
#pragma region "Button Down"
case SDL_MOUSEBUTTONDOWN: {
//printf("Mouse button down!\n");
glClearColor(0.1, 0.1, 0.1, 1);
if (event.button.button == SDL_BUTTON_LEFT) {
mouseButtonLeft = true;
}
break;
}
#pragma endregion;
#pragma region "Button Up"
case SDL_MOUSEBUTTONUP: {
//printf("Mouse button up!\n");
glClearColor(0, 0, 0, 1);
if (event.button.button == SDL_BUTTON_LEFT) {
mouseButtonLeft = false;
}
break;
}
#pragma endregion;
#pragma region "Mouse Motion"
case SDL_MOUSEMOTION: {
//printf("Mouse moved!\n");
if (mouseButtonLeft) {
rotX += event.motion.xrel;
rotY += event.motion.yrel;
}
break;
}
#pragma endregion;
#pragma region "Mouse Wheel"
case SDL_MOUSEWHEEL: {
if (event.wheel.y != 0) {
musicVolume += ((event.wheel.y > 0) ? 1 : -1);
if (musicVolume > 100) {
musicVolume = 100;
}
else if (musicVolume < 0) {
musicVolume = 0;
}
Mix_VolumeMusic(musicVolume);
printf("Volume: %i%c\n", musicVolume, '%');
}
if (event.wheel.y > 0) {
//printf("Scroll forward!\n");
}
else {
//printf("Scroll backward!\n");
}
break;
}
#pragma endregion;
#pragma region "Key Down"
case SDL_KEYDOWN: {
printf("Button [%s] pressed\n", SDL_GetKeyName(event.key.keysym.sym));
switch (event.key.keysym.sym) {
case SDLK_1: {
Mix_PlayChannel(-1, sound1, 0);
break;
}
case SDLK_2: {
Mix_PlayChannel(-1, sound2, 0);
break;
}
}
break;
}
#pragma endregion;
case SDL_QUIT: {
running = false;
}
}
}
Essayez codereview stackexchange. Personnellement, je ne bouclerais les événements qu'une seule fois par image, puis j'utiliserais les données recueillies à chaque fois. – this