Souci avec la bibliothèque SDL...
Résolu
Oguona
Messages postés
19
Statut
Membre
-
Oguona Messages postés 19 Statut Membre -
Oguona Messages postés 19 Statut Membre -
Bonjour,
J'essaye de me mettre à la bibliothèque SDL mais je n'ai encore pas réussi à faire un seul affichage correct !
J'ai beau chercher dans tout les coins, je ne vois pas pourquoi ce code, une fois exécuté me renvoie l'erreur "Segmentation fault". A s'en arracher les cheveux.
Le pire, est que ça passe si on utilise pas "SDL_MapRGB" mais la surface "plateau" sera noire quoi qu'il arrive...
J'aimerais une surface "plateau" blanche qui s'affiche sur un fond noir. Et je n'ai toujours pas réussi alors que ça parait être la base tout de même. Bref, Au-secour.
J'essaye de me mettre à la bibliothèque SDL mais je n'ai encore pas réussi à faire un seul affichage correct !
J'ai beau chercher dans tout les coins, je ne vois pas pourquoi ce code, une fois exécuté me renvoie l'erreur "Segmentation fault". A s'en arracher les cheveux.
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
void pause()
{
int continuer = 1;
SDL_Event event;
while (continuer)
{
SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_QUIT:
continuer = 0;
}
}
}
int main(){
//On déclare les deux surfaces
SDL_Surface *ecran = NULL;
SDL_Surface *plateau = NULL;
//On donne les deux couleurs utiles
Uint8 Couleur1 = SDL_MapRGB(ecran->format, 0, 0, 0);
Uint8 Couleur2 = SDL_MapRGB(ecran->format, 255, 255, 255);
//printf("%d\n%d\n", Couleur1, Couleur2);
printf("Les couleurs ne sont même pas initialisées\n");
SDL_Init(SDL_INIT_VIDEO);
//On définit la fenêtre et on initialise les surfaces
ecran = SDL_SetVideoMode(640, 480, 8, SDL_HWSURFACE | SDL_DOUBLEBUF);
plateau = SDL_CreateRGBSurface(SDL_HWSURFACE, 220, 180, 8, 0, 0, 0, 0);
SDL_WM_SetCaption("Cherchez le nombre", NULL);
//On colore les deux surfaces
SDL_FillRect(ecran, NULL, Couleur1);
SDL_FillRect(plateau, NULL, Couleur2);
//On définit la position du rectangle "plateau"
SDL_Rect position;
position.x = 0;
position.y = 0;
//On colle plateau sur ecran
SDL_BlitSurface(plateau, NULL, ecran, &position);
//On actualise
SDL_Flip(ecran);
//On met en pause jusqu'à la fermeture de la fenêtre
pause();
SDL_Quit();
return 0;
}
Le pire, est que ça passe si on utilise pas "SDL_MapRGB" mais la surface "plateau" sera noire quoi qu'il arrive...
J'aimerais une surface "plateau" blanche qui s'affiche sur un fond noir. Et je n'ai toujours pas réussi alors que ça parait être la base tout de même. Bref, Au-secour.
A voir également:
- Sdl_doublebuf
- Google photo bibliothèque - Accueil - Photo
- Bibliothèque dynamique aacs - Forum Windows
- Ce fichier contient l'historique des livres empruntés à la bibliothèque. combien de titres différents contient-il ? ✓ - Forum Windows 10
- Problème logiciel WinDVD BD for Vaio ✓ - Forum Logiciels
- Le point d'entrée de procédure est introuvable dans la bibliothèque de liens dynamiques ✓ - Forum Windows
3 réponses
Déjà définie tes variables au debut de la fonction, ça sera plus propre :)
Il te manque un sdlfreesurface à la fin pour le plateau.
Les couleurs sont des Uint32, mais tu peux mettre int tout simplement.
Il te manque un sdlfreesurface à la fin pour le plateau.
Les couleurs sont des Uint32, mais tu peux mettre int tout simplement.
J'ai donc un peu arrangé mon main(), je n'utilise plus de variables pour les couleurs et toutes les déclarations se font au début, mais la surface "Plateau" reste toujours noire et non blanche comme elle devrait être :
int main(){
//On déclare les deux surfaces
SDL_Surface *ecran = NULL;
SDL_Surface *plateau = NULL;
//On définit la position du rectangle "plateau"
SDL_Rect position;
position.x = 220;
position.y = 180;
SDL_Init(SDL_INIT_VIDEO);
//On définit la fenêtre et on initialise les surfaces
ecran = SDL_SetVideoMode(640, 480, 8, SDL_HWSURFACE | SDL_DOUBLEBUF);
plateau = SDL_CreateRGBSurface(SDL_HWSURFACE, 220, 180, 8, 0, 0, 0, 0);
SDL_WM_SetCaption("Cherchez le nombre", NULL);
//On donne les deux couleurs utiles
//Uint8 Couleur1 = SDL_MapRGB(ecran->format, 0, 0, 0);
//Uint8 Couleur2 = SDL_MapRGB(ecran->format, 255, 255, 255);
//printf("%d\n%d\n", Couleur1, Couleur2);
//On colore les deux surfaces
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
SDL_FillRect(plateau, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
//On colle plateau sur ecran
SDL_BlitSurface(plateau, NULL, ecran, &position);
//On actualise
SDL_Flip(ecran);
//On met en pause jusqu'à la fermeture de la fenêtre
pause();
SDL_FreeSurface(plateau);
SDL_Quit();
return 0;
}
plateau = SDL_CreateRGBSurface(SDL_HWSURFACE, 220, 180, 8, 0, 0, 0, 0);
Pas 8 mais 32 !!!!!!!!
Pas 8 mais 32 !!!!!!!!