CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : [SDL] Problème affichage

DébutPage précedente
1
Page suivantePage suivante
terminatueur76 terminatueur76
MP
Niveau 10
22 juillet 2014 à 23:21:05

Bonjour tout le monde, j'avais crée un projet qui était bien parti mais j'ai décidé de l'optimiser car j'avais fais pas mal de conneries ( plein de variables globales, pas d'argument pour les fonctions...)

Donc j'ai décidé d'ajouter des arguments pour mes fonctions en les modifiant une par une mais je suis bloquer car la ça ne fonctionne plus....j'ai écrasé le projet précédent comme un con...)

Donc ce qui fonctionne et ce qui fonctionne pas:

Mes images de bateaux fonctionnent bien, la fenêtre et l'image "ecran" ( le fond de la fenêtre en gros) fonctionne bien avec la couleur que je veux

Pour ce qui ne fonctionne pas c'est le quadrillage, j'ai crée des colonnes et lignes mais mon programme ne les affichent pas.... je suis quasi sûr que ça vient de la fonction jeu qui gère les touches du clavier et le "flip" de la fenêtre, voici le code:

Fonction main:

int main(int argc, char *argv[])
{

SDL_Surface *ecran = NULL; // varaible de la fenetre
SDL_Init(SDL_INIT_VIDEO); // Initialisation de la SDL

if(TTF_Init() == -1) // si il y a eu une erreur lors du démarrage de SDL ttf
{
fprintf(stderr, "Erreur d'initialisation de TTF_Init : %s\n", TTF_GetError());
exit(EXIT_FAILURE);
}

SDL_WM_SetIcon(SDL_LoadBMP("pirate.bmp"), NULL); // Chargement de l'icône AVANT SDL_SetVideoMode ( icone du programme)
ecran = SDL_SetVideoMode(1250, 750, 32, SDL_SWSURFACE | SDL_DOUBLEBUF); // Ouverture de la fenêtre avec les paramètre de hauteur et largeur

SDL_WM_SetCaption("Bataille Navale", NULL); // nom de la fenetre

// Coloration de la surface ecran en gris
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 110, 110, 110));

jeu(ecran);

if (ecran == NULL) // Si l'ouverture a échoué, on le note et on arrête , gestion erreur ouverture fenetre
{
fprintf(stderr, "Impossible de charger le mode vidéo : %s\n", SDL_GetError());
exit(EXIT_FAILURE);
}

SDL_Flip(ecran); // Mise à jour de l'écran avec sa nouvelle couleur //

TTF_CloseFont(police); // Fermeture de la police du ttf
TTF_Quit(); // Arrêt du ttf SDL

SDL_Quit(); // Arrêt de la SDL

return EXIT_SUCCESS; // Fermeture du programme
}

Fonction quadrillage (qui gère le quadrillage évidemment...):

void quadrillage(SDL_Surface *ecran)
{
int i2,j2,i3,j3,j4=0;
float i4=0;
SDL_Rect position; // variable position des colonnes
SDL_Rect position2; // variable position des lignes

SDL_Surface *colonne[25] = {NULL}; // variable tableau des colonne ( surface ajouter sur l'écran)
SDL_Surface *ligne[14] = {NULL}; // variable tableau des lignes ( surface ajouter sur l'écran)

//boucle création colonne
for(i2=0;i2<=24;i2++)
{
colonne[i2]= SDL_CreateRGBSurface(SDL_SWSURFACE, 1, 750, 32, 0, 0, 0, 0); // Paramètre des colonne avec sa taille
}

//boucle placement des colonnes

for(i3=0;i3<=24;i3++)
{

position.x = i4; // Les coordonnées de la surface colonne
position.y = 0;
SDL_FillRect(colonne[i3], NULL, SDL_MapRGB(ecran->format, 32, 32, 32)); // on rempli les colonne avec la couleur prédéfinie
SDL_BlitSurface(colonne[i3], NULL, ecran, &position); // Collage de la surface sur l'écran
i4+=50;
}

//boucle création ligne
for(j2=0;j2<=14;j2++)
{
ligne[j2]= SDL_CreateRGBSurface(SDL_SWSURFACE, 1250, 1, 32, 0, 0, 0, 0); // Paramètre des lignes avec sa taille
}

//boucle placement des lignes
for(j3=0;j3<=14;j3++)
{

position2.x = 0; // Les coordonnées de la surface lignes
position2.y = j4;
SDL_FillRect(ligne[j3], NULL, SDL_MapRGB(ecran->format, 32, 32, 32)); // on rempli les lignes avec la couleur prédéfinie
SDL_BlitSurface(ligne[j3], NULL, ecran, &position2); // Collage de la surface sur l'écran
j4+=50;
}

SDL_Flip(ecran);

}

Et la fonction jeu qui gère les touches+ le flip de l'écran:

void jeu(SDL_Surface *ecran) // fonction quadrillage
{

SDL_Surface *bateau = NULL; // varaible du bateau joueur
SDL_Surface *bateaupirR = NULL; // varaible du bateau ennemi
SDL_Surface *mer[49] = {NULL}; // variable surface mer
SDL_Surface *ile = NULL; // varaible surface ile
SDL_Rect position; // variable position des colonnes
SDL_Rect position2; // variable position des lignes
SDL_Rect position3; // variable position bateau joueur
SDL_Rect positionbatr; // variable position bateau ennemi
SDL_Rect positioneau; // variable position texture mer
SDL_Rect positionIle; // variable position surface ile
SDL_Event event1;
SDL_EnableKeyRepeat(0, 0);
int i2,o3,j2,i3=0,j3=0,j4=0,continuer=1;
float i4=0;

bateau = SDL_LoadBMP("Bateau_pirate.bmp"); //chargement du bateau joueur sur la surface
bateaupirR = SDL_LoadBMP("Bateau_pirate_rouge.bmp"); //chargement du bateau ennemi sur la surface
ile = SDL_LoadBMP("test.bmp"); //chargement de la surface ile

SDL_SetColorKey(bateau, SDL_SRCCOLORKEY, SDL_MapRGB(bateau->format, 255, 255, 255)); // Définir couleur derrière le bateau en transparent
SDL_SetColorKey(bateaupirR, SDL_SRCCOLORKEY, SDL_MapRGB(bateaupirR->format, 255, 255, 255)); // Définir couleur derrière le bateau pirate en transparent
SDL_SetColorKey(ile, SDL_SRCCOLORKEY, SDL_MapRGB(ile->format, 255, 255, 255)); // Définir couleur derrière la surface ile en transparent

positionIle.x=250;
positionIle.y=250;
position3.x = 210;
position3.y = 210; // position bateau joueur
positionbatr.x=410;
positionbatr.y=310; // position 1 bateau pirate

//boucle création texture mer
for(o3=0;o3<=48;o3++)
{

mer[o3] = SDL_LoadBMP("Texture_eau2.bmp");

}

while(continuer)
{
while( SDL_PollEvent( &event1 ) )
{

switch (event1.type)
{
case SDL_QUIT:
continuer = 0;
break;
case SDL_KEYDOWN:
switch (event1.key.keysym.sym)
{
case SDLK_ESCAPE:
continuer = 0;
break;

case SDLK_LEFT:
t1=2;
Movebat(position3);
t1=0;
break;

case SDLK_RIGHT:
t1=1;
Movebat(position3);
t1=0;
break;
case SDLK_UP:
t1=3;
Movebat(position3);
t1=0;
break;
case SDLK_DOWN:
t1=4;
Movebat(position3);
t1=0;
break;

default:
break;

}
break;
}
}

// Coloration de la surface ecran en gris
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 110, 110, 110));

void quadrillage(ecran);
compteur=0;
compteur2='a';

SDL_BlitSurface(bateau, NULL, ecran, &position3); // Collage de la surface bateau joueur sur l'écran
SDL_BlitSurface(bateaupirR, NULL, ecran, &positionbatr); // Collage de la surface bateau ennemi sur l'écran
SDL_BlitSurface(ile, NULL, ecran, &positionIle); // Collage de la surface ile sur l'écran

SDL_Flip(ecran); // mettre à jour l'affichage
void quadrillage(ecran);
}

}

Il y a aussi une fonction movebat qui gère le déplacement du bateau en fonction des touches mais de toute façon elle gène ne rien le reste ( et elle fonctionne pas non plus d'ailleurs...)

Je précise que j'ai essayé de mettre l'appel de ma fonction quadrillage un peu partout dans ma fonction jeu pour voir mais ça change pas grand chose.....

Donc si quelqu'un saurait ou est le problème je serais ravi d'être débloquer :svp:

Pseudo supprimé
Niveau 8
23 juillet 2014 à 00:34:26

dans ta fonction jeu, plusieurs fois tu déclares un prototype au lieu d'appeler ta fonction

void quadrillage(ecran);

terminatueur76 terminatueur76
MP
Niveau 10
23 juillet 2014 à 01:42:11

Oui j'ai fais 2 fois
void quadrillage(ecran);

pour faire des test mais je peux le placer n'importe ou dans la fonction jeu ça affiche pas le quadrillage....

Pseudo supprimé
Niveau 8
23 juillet 2014 à 01:58:02

sauf que

    void quadrillage(ecran);

est un prototype contrairement a

quadrillage(ecran);

qui est un appel de fonction.

terminatueur76 terminatueur76
MP
Niveau 10
23 juillet 2014 à 13:52:14

Ah oui pas faux :gni:

Bon j'ai retiré le void je voie le quadrillage mais j'ai 2 problèmes:

-Si je met
quadrillage(ecran); avant le
SDL_Flip(ecran);

Ca me fait clignoter toutes mes images sauf le quadrillage....

Et si je le met après le flip ça me fais clignoter que le quadrillage.....

J'avais pas eu ce problème la sur mon projet mal optimisé ou est ce que j'ai fais une connerie svp?

terminatueur76 terminatueur76
MP
Niveau 10
23 juillet 2014 à 14:16:12

A mon avis ça vient de ces lignes:

SDL_BlitSurface(bateau, NULL, ecran, &position3); // Collage de la surface bateau joueur sur l'écran
SDL_BlitSurface(bateaupirR, NULL, ecran, &positionbatr); // Collage de la surface bateau ennemi sur l'écran
SDL_BlitSurface(ile, NULL, ecran, &positionIle); // Collage de la surface ile sur l'écran

Qui sont juste avant le flip mais le problème c'est que si je les met pas dans la boucle
while(continuer) ça me les affichent pas et si je les met dans cette boucle ces images font que de clignoter à cause du flip...

terminatueur76 terminatueur76
MP
Niveau 10
26 juillet 2014 à 14:12:17

:up:

DébutPage précedente
1
Page suivantePage suivante
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
Infos 0 connecté(s)

Gestion du forum

Modérateurs : godrik, LGV
Contacter les modérateurs - Règles du forum

Sujets à ne pas manquer

La vidéo du moment