SDL2, Code::block, gestion evenement, creation de surface
Résolu/Fermé
poparnassus
Messages postés
426
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019
-
Modifié par poparnassus le 10/04/2016 à 19:59
poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019 - 30 avril 2016 à 22:39
poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019 - 30 avril 2016 à 22:39
A voir également:
- SDL2, Code::block, gestion evenement, creation de surface
- Code asci - Guide
- Code puk bloqué - Guide
- Code telephone oublié - Guide
- Code activation windows 10 - Guide
- Code gta 4 ps4 - Guide
5 réponses
[Dal]
Messages postés
6203
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
29 janvier 2025
1 099
12 avril 2016 à 13:24
12 avril 2016 à 13:24
Salut poparnassus,
Les numéros de lignes signalés par le compilateur ne correspondent pas aux numéros de ligne que tu postes.
En outre, ton programme est long et sans doutes 90% est non pertinent par rapport à ta question, qui, par ailleurs, n'est pas claire.
Fait l'effort de faire un programme de 10 lignes qui illustre ton problème, et de formuler clairement ta question.
C'est la base du débogage que de circonscrire ton problème.
Probablement, en faisant cela, tu verras où se trouve la cause des erreurs, et tu n'auras même pas besoin de poser une question ici.
Dal
Les numéros de lignes signalés par le compilateur ne correspondent pas aux numéros de ligne que tu postes.
En outre, ton programme est long et sans doutes 90% est non pertinent par rapport à ta question, qui, par ailleurs, n'est pas claire.
Fait l'effort de faire un programme de 10 lignes qui illustre ton problème, et de formuler clairement ta question.
C'est la base du débogage que de circonscrire ton problème.
Probablement, en faisant cela, tu verras où se trouve la cause des erreurs, et tu n'auras même pas besoin de poser une question ici.
Dal
[Dal]
Messages postés
6203
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
29 janvier 2025
1 099
Modifié par [Dal] le 15/04/2016 à 10:09
Modifié par [Dal] le 15/04/2016 à 10:09
Salut poparnassus,
Voilà une illustration basée sur ton code ci-dessus.
Dal
Voilà une illustration basée sur ton code ci-dessus.
#include <stdio.h> #include <SDL2/SDL.h> #define WINDOW_W 800 #define WINDOW_H 800 /* on crée un type struct permettant de stocker les variables utiles * à l'affichage SDL qu'on va pouvoir passer aux fonctions * éliminant ainsi la nécessité de créer des variables * globales */ struct wt_SDL { SDL_Window *screen; SDL_Renderer *renderer; SDL_Rect rectangle1; }; typedef struct wt_SDL wt_SDL; void RAZ_wt_SDL(wt_SDL *wt_SDL); void set_wt_SDL(const char *titre, wt_SDL *wt_SDL); void cleanup(wt_SDL *wt_SDL); void RAZ_wt_SDL(wt_SDL *wt_SDL) { /* mise à zéro de la struct SDL_Rect */ wt_SDL->rectangle1.x = 0; wt_SDL->rectangle1.y = 0; wt_SDL->rectangle1.w = 0; wt_SDL->rectangle1.h = 0; } void set_wt_SDL(const char *titre, wt_SDL *wt_SDL) { /* Creation de la fenetre */ wt_SDL->screen = SDL_CreateWindow(titre,SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,WINDOW_W,WINDOW_H,SDL_WINDOW_SHOWN); /* Creation du renderer */ wt_SDL->renderer = SDL_CreateRenderer(wt_SDL->screen, -1, SDL_RENDERER_ACCELERATED); if (wt_SDL->screen == NULL || wt_SDL->renderer == NULL) { printf("Impossible d'initialiser le mode ecran %s ,\n", SDL_GetError()); } else { /* noir */ SDL_SetRenderDrawColor(wt_SDL->renderer, 0, 0, 0, SDL_ALPHA_OPAQUE); SDL_RenderClear(wt_SDL->renderer); wt_SDL->rectangle1.x = 20; wt_SDL->rectangle1.y = 20; wt_SDL->rectangle1.w = WINDOW_W - (wt_SDL->rectangle1.x*2); wt_SDL->rectangle1.h = WINDOW_H/4; /* blanc */ SDL_SetRenderDrawColor(wt_SDL->renderer, 255, 255, 255, SDL_ALPHA_OPAQUE); SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->rectangle1); SDL_RenderPresent(wt_SDL->renderer); } } void cleanup(wt_SDL *wt_SDL) { SDL_DestroyRenderer(wt_SDL->renderer); SDL_DestroyWindow(wt_SDL->screen); SDL_Quit(); } int main(int argc, char** argv) { /* La création de la struct alloue la mémoire nécessaire * aux variables qu'elle contient */ wt_SDL wt_SDL; /* pour la suite, on passe un pointeur sur la struct * pour faire un passage des paramètres par référence * et non par copie des données */ /* Remise à zéro */ RAZ_wt_SDL(&wt_SDL); /* Affichage de l'arriere plan */ set_wt_SDL(" Programme Wild Thumper: Station de pilotage ", &wt_SDL); getchar(); cleanup(&wt_SDL); return 0; }
Dal
poparnassus
Messages postés
426
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019
30
Modifié par poparnassus le 15/04/2016 à 18:31
Modifié par poparnassus le 15/04/2016 à 18:31
Honetement, MILLE MERCI !! Grace à toi J'ai trouver pourquoi ca marcher pas, en faite je mettai un pointeur de cette façon
et quand je l'utilisai dans une fonction je placer une fleche "->" et non un (1) point
du coup ca marcher pas,
(1) Du coup on met un point pour acceder a la structure d'une fonction qui n'est pas pointer, donc en faite on accede directement a sa valeur et non son adresse memoire.
Mais j'ai du mal a comprendre pourquoi un pointeur sur SDL_Rect ne fonctionne pas, ou alors je l'ai mal utiliser.
SDL_Rect * rectangle1;et lorsque j'initialiser
mastructure->rectangle1->x = 0 ;
et quand je l'utilisai dans une fonction je placer une fleche "->" et non un (1) point
wt_SDL->rectangle1->x = 20; wt_SDL->rectangle1->y = 20; wt_SDL->rectangle1->w = WINDOW_W - (wt_SDL->rectangle1->x*2); wt_SDL->rectangle1->h = WINDOW_H/4; SDL_SetRenderDrawColor(wt_SDL->renderer,255,0,0,0); // blanc SDL_RenderFillRect(wt_SDL->renderer,wt_SDL->rectangle1);
du coup ca marcher pas,
(1) Du coup on met un point pour acceder a la structure d'une fonction qui n'est pas pointer, donc en faite on accede directement a sa valeur et non son adresse memoire.
Mais j'ai du mal a comprendre pourquoi un pointeur sur SDL_Rect ne fonctionne pas, ou alors je l'ai mal utiliser.
poparnassus
Messages postés
426
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019
30
15 avril 2016 à 19:23
15 avril 2016 à 19:23
Par contre ligne 89, c'est quoi l'utilité de
getchar();
poparnassus
Messages postés
426
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019
30
16 avril 2016 à 00:04
16 avril 2016 à 00:04
Un Petit Screen shot du progr !
https://imgur.com/r4fK9kH
Me reste plus cas faire afficher mes variable joystick, et enfin, je passe au reseau et à la camera !!!
UN GRAND GRAND MERCI à ----->DAL<------
https://imgur.com/r4fK9kH
Me reste plus cas faire afficher mes variable joystick, et enfin, je passe au reseau et à la camera !!!
UN GRAND GRAND MERCI à ----->DAL<------
poparnassus
Messages postés
426
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019
30
16 avril 2016 à 03:45
16 avril 2016 à 03:45
Une question:
Dans ma boucle principale du main j'appele une fonction qui execute le code ci dessous, j'ai mais valeur d'axe joystick qui s'affiche mais la surface ne s'efface pas a chaque tour de boucle, du coup ca fait un gros patter tout noir ^^
int w = 5 , h = 5; SDL_FreeSurface(wt_SDL->SJoy12); SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //BLANC sprintf(input->JGXX, "X : %d",input->JGX); wt_SDL->SJoy12 = TTF_RenderText_Solid(wt_SDL->police,input->JGXX,wt_SDL->couleurNoire); wt_SDL->TJoy12 = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->SJoy12); SDL_QueryTexture(wt_SDL->TJoy12, NULL, NULL, &w, &h); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->TJoy12, NULL, &wt_SDL->Joy12); SDL_RenderPresent(wt_SDL->renderer);
Dans ma boucle principale du main j'appele une fonction qui execute le code ci dessous, j'ai mais valeur d'axe joystick qui s'affiche mais la surface ne s'efface pas a chaque tour de boucle, du coup ca fait un gros patter tout noir ^^
poparnassus
Messages postés
426
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019
30
16 avril 2016 à 14:23
16 avril 2016 à 14:23
J'ai modifier comme ceci, ca marche mais j'ai un probleme de memoire, je travaille dessus.
//JGX int w = 5 , h = 5; SDL_FreeSurface(wt_SDL->SJoy12); sprintf(input->JGXX, "X: %d",input->JGX); SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //BLANC SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->Joy12); wt_SDL->SJoy12 = TTF_RenderText_Solid(wt_SDL->police,input->JGXX,wt_SDL->couleurNoire); wt_SDL->TJoy12 = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->SJoy12); SDL_QueryTexture(wt_SDL->TJoy12, NULL, NULL, &w, &h); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->TJoy12, NULL, &wt_SDL->Joy12);
poparnassus
Messages postés
426
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019
30
Modifié par poparnassus le 16/04/2016 à 18:26
Modifié par poparnassus le 16/04/2016 à 18:26
J'AI REUSSI !!! Maintenant je passe au reseau !!
poparnassus
Messages postés
426
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019
30
16 avril 2016 à 22:50
16 avril 2016 à 22:50
J'ai une question, est il n,écessaire de concatener mes variables joystick dans une seul variable pour les envoyer sur le reseau ?
envoyer un bloc me parait mieux que plusieurs bloc mais bon, je sais pas trop en faite.
envoyer un bloc me parait mieux que plusieurs bloc mais bon, je sais pas trop en faite.
poparnassus
Messages postés
426
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019
30
18 avril 2016 à 14:27
18 avril 2016 à 14:27
La suite dans un future topic
MERCI
MERCI
poparnassus
Messages postés
426
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019
30
Modifié par poparnassus le 18/04/2016 à 14:50
Modifié par poparnassus le 18/04/2016 à 14:50
CODE SOURCE FINAL EN C:
pré-requis
- librairies SDL2.0
- librairies SDL2_ttf
- 1 manette xbox360
Dans ce code, qui a pour objectif de piloter un robot via mon reseau local:
Depuis mon interface qui sera donc le "serveur", je récupère des événements manette XBOX + clavier, je les affiches dans une fenêtre scindée en deux partie (le haut pour la partie controle joystick et retour capteur, et le bas affichage de la camera).
Dans ce code je ne traite pas les informations liées au réseau, je ferai ceci prochainement.
main.c
fonction.c
fonction.h
pré-requis
- librairies SDL2.0
- librairies SDL2_ttf
- 1 manette xbox360
Dans ce code, qui a pour objectif de piloter un robot via mon reseau local:
Depuis mon interface qui sera donc le "serveur", je récupère des événements manette XBOX + clavier, je les affiches dans une fenêtre scindée en deux partie (le haut pour la partie controle joystick et retour capteur, et le bas affichage de la camera).
Dans ce code je ne traite pas les informations liées au réseau, je ferai ceci prochainement.
main.c
#include "fonction.h" int main(int argc, char** argv) { fichierLog = fopen("LOG.txt", "w+"); // Creation du fichier log //Creation des structures Input input; wt_SDL wt_SDL; //Init de SDL_VIDEO , SDL_JOYSTICK , SDL_TTF initialisation(" Programme Wild Thumper: Station de pilotage ",&wt_SDL); //initialisation des structures RAZ_input(&input); //init input + evenement joystick RAZ_wt_SDL(&wt_SDL) ; //Creation des surfaces de la fenetre ArrierePlan(&input, &wt_SDL); //calibration_joystick(&input, &wt_SDL); ArrierePlan_TTF(&input, &wt_SDL); while (!input.quitter) { updateEvent(&input); if (input.mode_pilotage == 1) { modepilotage1(&input, &wt_SDL); } else if (input.mode_pilotage == 2) { modepilotage2(&input, &wt_SDL); //Warnig du compilateur, j'ai pas trouver poourquoi } envoiData(&input); SDL_Delay(10); system("cls"); } SDL_JoystickClose(input.joystick); cleanup(&wt_SDL); system("pause"); return 0; }
fonction.c
#include "fonction.h" //Initialisation SDL void initialisation(const char *titre,wt_SDL *wt_SDL) { if (SDL_Init( SDL_INIT_VIDEO |SDL_INIT_JOYSTICK) != 0) { fprintf(fichierLog,"Impossible de charger la SDL. SDL_ERROR = %s \n", SDL_GetError()); EXIT_FAILURE; } else { //Creation de la fenetre wt_SDL->screen = SDL_CreateWindow(titre,SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,WINDOW_W,WINDOW_H,SDL_WINDOW_SHOWN); //Creation du renderer wt_SDL->renderer = SDL_CreateRenderer( wt_SDL->screen,-1,SDL_RENDERER_ACCELERATED); if ( wt_SDL->screen == NULL || wt_SDL->renderer == NULL) { fprintf(fichierLog,"Impossible d'initialiser le mode ecran %s ,\n", SDL_GetError()); } } //Initialisation TTF Pour ecrire du texte dans la fenetre SDL if(TTF_Init() != 0) { fprintf(fichierLog,"Impossible de charger la SDL2_TTF_Init. SDL_ERROR = %s\n", TTF_GetError()); EXIT_FAILURE; } else { wt_SDL->police = TTF_OpenFont("Caslon.ttf",18); if(wt_SDL->police == NULL) { fprintf(fichierLog,"Impossible de charger la police Calson.ttf . SDL_ERROR = %s\n\n", TTF_GetError()); EXIT_FAILURE; } wt_SDL->couleurNoire.a = 0; wt_SDL->couleurNoire.b = 0; wt_SDL->couleurNoire.g = 0; wt_SDL->couleurNoire.r = 0; wt_SDL->couleurRouge.a = 0; wt_SDL->couleurRouge.b = 0; wt_SDL->couleurRouge.g = 0; wt_SDL->couleurRouge.r = 255; wt_SDL->couleurBlanche.a = 255; wt_SDL->couleurBlanche.b = 255; wt_SDL->couleurBlanche.g = 255; wt_SDL->couleurBlanche.r = 255; } } //Initialisation structure void RAZ_input(Input *input) { SDL_JoystickEventState(SDL_ENABLE); //Verifie si un joystixk est connecter if (SDL_NumJoysticks() < 1) { fprintf(fichierLog,"Pas de joystick connecter. \n"); EXIT_FAILURE; } input->joystick = SDL_JoystickOpen(0); input->quitter = 0; input->quittermode = 0; //float upJGX=0; //float upJGY =0; //float upJDX=0; //float upJDY=0; input->data[200] =0; input->JGXX[10] = 0; input->JGYY[10] = 0; input->JDXX[10] = 0; input->JDYY[10] = 0; input->JGX = 0; //position tableau = 0 input->JGY = 0; //position tableau = 1 input->JDX = 0; //position tableau = 2 input->JDY = 0; //position tableau = 3 input->BOUTTON_A = 0; //position tableau = 4 - 0 Pour Boutton Relacher input->BOUTTON_B = 0;//position tableau = 5 input->BOUTTON_Y = 0;//position tableau = 6 input->BOUTTON_X = 0;//position tableau = 7 input->BOUTTON_LB = 0; //position tableau = 8 boutton Gauche input->BOUTTON_RB = 0; //position tableau = 9 boutton droite input->BOUTTON_START = 0;//position tableau = 10 input->BOUTTON_BACK = 0; //position tableau = 11 //Zone morte input->DEADZONE_P = 8000; input->DEADZONE_N = -8000; //Mode de pilotage input->mode_pilotage = 0; } void RAZ_wt_SDL(wt_SDL *wt_SDL) { //Allocation de la memoire //wt_SDL->rectangle1 = (SDL_Rect *)malloc(sizeof (SDL_Rect)); //initialisation des variables de la structure wt_SDL->RTITRE.x = 0; wt_SDL->RTITRE.y = 0; wt_SDL->RTITRE.w = 0; wt_SDL->RTITRE.h = 0; wt_SDL->rectangle1.x = 0; wt_SDL->rectangle1.y = 0; wt_SDL->rectangle1.w = 0; wt_SDL->rectangle1.h = 0; //wt_SDL->rectangle1 = SDL_CreateRGBSurface(SDL_HWSURFACE,&wt_SDL->rectangle1.w,&wt_SDL->rectangle1.h,32,0,0,0,0); wt_SDL->rectangleMID.x= 0; wt_SDL->rectangleMID.y=0; wt_SDL->rectangleMID.w=0; wt_SDL->rectangleMID.h=0; wt_SDL->rectangleA.x= 0; wt_SDL->rectangleA.y=0; wt_SDL->rectangleA.w=0; wt_SDL->rectangleA.h=0; wt_SDL->rectangleB.x=0; wt_SDL->rectangleB.y=0; wt_SDL->rectangleB.w=0; wt_SDL->rectangleB.h=0; wt_SDL->rectangleX.x=0; wt_SDL->rectangleX.y=0; wt_SDL->rectangleX.w=0; wt_SDL->rectangleX.h=0; wt_SDL->rectangleY.x=0; wt_SDL->rectangleY.y=0; wt_SDL->rectangleY.w=0; wt_SDL->rectangleY.h=0; wt_SDL->Joy1.x = 0; wt_SDL->Joy1.y = 0; wt_SDL->Joy1.w = 0; wt_SDL->Joy1.h = 0; wt_SDL->Joy11.w =0; wt_SDL->Joy11.h =0; wt_SDL->Joy11.x =0; wt_SDL->Joy11.y =0; wt_SDL->Joy12.w =0; wt_SDL->Joy12.h =0; wt_SDL->Joy12.x =0; wt_SDL->Joy12.y =0; wt_SDL->Joy13.w =0; wt_SDL->Joy13.h =0; wt_SDL->Joy13.x =0; wt_SDL->Joy13.y =0; wt_SDL->Joy2.x = 0; wt_SDL->Joy2.y = 0; wt_SDL->Joy2.w = 0; wt_SDL->Joy2.h = 0; wt_SDL->Joy21.w =0; wt_SDL->Joy21.h =0; wt_SDL->Joy21.x =0; wt_SDL->Joy21.y =0; wt_SDL->Joy22.w =0; wt_SDL->Joy22.h =0; wt_SDL->Joy22.x =0; wt_SDL->Joy22.y =0; wt_SDL->Joy23.w =0; wt_SDL->Joy23.h =0; wt_SDL->Joy23.x =0; wt_SDL->Joy23.y =0; wt_SDL->case1.x=0; wt_SDL->case1.y=0; wt_SDL->case1.w=0; wt_SDL->case1.h=0; wt_SDL->case2.x=0; wt_SDL->case2.y=0; wt_SDL->case2.w=0; wt_SDL->case2.h=0; wt_SDL->case3.x=0; wt_SDL->case3.y=0; wt_SDL->case3.w=0; wt_SDL->case3.h=0; wt_SDL->case4.x=0; wt_SDL->case4.y=0; wt_SDL->case4.w=0; wt_SDL->case4.h=0; wt_SDL->case5.x=0; wt_SDL->case5.y=0; wt_SDL->case5.w=0; wt_SDL->case5.h=0; wt_SDL->case6.x=0; wt_SDL->case6.y=0; wt_SDL->case6.w=0; wt_SDL->case6.h=0; wt_SDL->rectangleCAM.x=0; wt_SDL->rectangleCAM.y=0; wt_SDL->rectangleCAM.w=0; wt_SDL->rectangleCAM.h=0; wt_SDL->calibrer.x = 0; wt_SDL->calibrer.y = 0; wt_SDL->calibrer.w = 0; wt_SDL->calibrer.h = 0; wt_SDL->cal_titre.x = 0; wt_SDL->cal_titre.y = 0; wt_SDL->cal_titre.w = 0; wt_SDL->cal_titre.h = 0; } //Fonction QUITTER ------------------------ void cleanup(wt_SDL *wt_SDL) { //Déstruction des textures SDL_DestroyTexture(wt_SDL->Image_fond); //Image de fond SDL_DestroyTexture(wt_SDL->TRAtext); // Bouuton A SDL_DestroyTexture(wt_SDL->TRYtext); // Y SDL_DestroyTexture(wt_SDL->TRXtext);// X SDL_DestroyTexture(wt_SDL->TRBtext);// B SDL_DestroyTexture(wt_SDL->TJoy13); SDL_DestroyTexture(wt_SDL->TJoy12); SDL_DestroyTexture(wt_SDL->TJoy11); SDL_DestroyTexture(wt_SDL->TJoy23); SDL_DestroyTexture(wt_SDL->TJoy22); SDL_DestroyTexture(wt_SDL->TJoy21); SDL_DestroyTexture(wt_SDL->TJoy1); SDL_DestroyTexture(wt_SDL->TJoy1); SDL_DestroyTexture(wt_SDL->Tcase1); SDL_DestroyTexture(wt_SDL->Tcase2); SDL_DestroyTexture(wt_SDL->Tcase3); SDL_DestroyTexture(wt_SDL->Tcase4); SDL_DestroyTexture(wt_SDL->Tcase5); SDL_DestroyTexture(wt_SDL->Tcase6); //Déstruction des surfaces SDL_FreeSurface(wt_SDL->SJoy13); SDL_FreeSurface(wt_SDL->SJoy12); SDL_FreeSurface(wt_SDL->SJoy11); SDL_FreeSurface(wt_SDL->SJoy23); SDL_FreeSurface(wt_SDL->SJoy22); SDL_FreeSurface(wt_SDL->SJoy21); SDL_FreeSurface(wt_SDL->SJoy1); SDL_FreeSurface(wt_SDL->SJoy1); SDL_FreeSurface(wt_SDL->RAtext);// Boutton A SDL_FreeSurface( wt_SDL->RYtext);// Y SDL_FreeSurface( wt_SDL->RXtext );// X SDL_FreeSurface( wt_SDL->RBtext);// B SDL_FreeSurface( wt_SDL->Scase1); SDL_FreeSurface( wt_SDL->Scase2); SDL_FreeSurface( wt_SDL->Scase3); SDL_FreeSurface( wt_SDL->Scase4); SDL_FreeSurface( wt_SDL->Scase5); SDL_FreeSurface( wt_SDL-> Scase6); SDL_FreeSurface(wt_SDL->Image); // Image de fond SDL_DestroyRenderer(wt_SDL->renderer); SDL_DestroyWindow(wt_SDL->screen); TTF_CloseFont(wt_SDL->police); fclose(fichierLog); TTF_Quit(); SDL_Quit(); } //-------------------------------- void ArrierePlan(Input *input, wt_SDL *wt_SDL) { SDL_RenderPresent(wt_SDL->renderer); SDL_SetRenderDrawColor(wt_SDL->renderer, 0, 0, 0, 255); // NOIR SDL_RenderClear(wt_SDL->renderer); //Partie commande { wt_SDL->rectangle1.x = 20; wt_SDL->rectangle1.y = 20; wt_SDL->rectangle1.w = WINDOW_W - (wt_SDL->rectangle1.x*2); wt_SDL->rectangle1.h = WINDOW_H/4; SDL_SetRenderDrawColor(wt_SDL->renderer,255,0,0,0); // blanc SDL_RenderFillRect(wt_SDL->renderer,&wt_SDL->rectangle1); wt_SDL->RTITRE.x = wt_SDL->rectangle1.w/2 - ((wt_SDL->rectangle1.w / 3)/2); wt_SDL->RTITRE.y = wt_SDL->rectangle1.y; wt_SDL->RTITRE.w = WINDOW_W/3; wt_SDL->RTITRE.h = 40; SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); // blanc SDL_RenderFillRect(wt_SDL->renderer,&wt_SDL->RTITRE); { //Boutton A B X Y int touche=40; //BOUTTON Y wt_SDL->rectangleY.x = wt_SDL->rectangle1.x + (wt_SDL->rectangle1.w/2)-(touche/2) ; //centre du rectangle 1 wt_SDL->rectangleY.y = wt_SDL->rectangle1.h - (touche * 3); wt_SDL->rectangleY.w = touche; wt_SDL->rectangleY.h = touche; SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //BLANC SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->rectangleY); //BOUTTON A wt_SDL->rectangleA.x = wt_SDL->rectangleY.x; wt_SDL->rectangleA.y = wt_SDL->rectangleY.y + touche*2; wt_SDL->rectangleA.w = touche; wt_SDL->rectangleA.h = touche; SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //BLANC SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->rectangleA); //BOUTTON B wt_SDL->rectangleB.x = wt_SDL->rectangleY.x + touche; wt_SDL->rectangleB.y = wt_SDL->rectangleY.y + touche; wt_SDL->rectangleB.w = touche; wt_SDL->rectangleB.h = touche; SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->rectangleB); //BOUTTON X wt_SDL->rectangleX.x = wt_SDL->rectangleY.x - touche; wt_SDL->rectangleX.y = wt_SDL->rectangleY.y + touche; wt_SDL->rectangleX.w = touche; wt_SDL->rectangleX.h = touche; SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //BLANC SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->rectangleX); //Carré du milieu wt_SDL->rectangleMID.x = wt_SDL->rectangleY.x; wt_SDL->rectangleMID.y = wt_SDL->rectangleY.y + touche; wt_SDL->rectangleMID.w = touche; wt_SDL->rectangleMID.h = touche; SDL_SetRenderDrawColor(wt_SDL->renderer,0,0,0,255); //NOIR SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->rectangleMID); //Position par rapport a la touche X int marge=10; wt_SDL->Joy1.w = wt_SDL->rectangleMID.w+wt_SDL->rectangleA.w+wt_SDL->rectangleY.w+30; wt_SDL->Joy1.h = wt_SDL->rectangleMID.h+wt_SDL->rectangleA.h+wt_SDL->rectangleY.h; wt_SDL->Joy1.x = wt_SDL->rectangleX.x - wt_SDL->Joy1.w - marge; wt_SDL->Joy1.y = wt_SDL->rectangleY.y; SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //BLANC SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->Joy1); wt_SDL->Joy11.w =wt_SDL->Joy1.w; wt_SDL->Joy11.h =wt_SDL->Joy1.h/3; wt_SDL->Joy11.x =wt_SDL->Joy1.x; wt_SDL->Joy11.y =wt_SDL->Joy1.y; SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //BLANC SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->Joy11); wt_SDL->Joy12.w =wt_SDL->Joy11.w; wt_SDL->Joy12.h =wt_SDL->Joy11.h; wt_SDL->Joy12.x =wt_SDL->Joy11.x ; wt_SDL->Joy12.y =wt_SDL->Joy11.y + wt_SDL->Joy12.h; SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //BLANC SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->Joy12); wt_SDL->Joy13.w =wt_SDL->Joy12.w; wt_SDL->Joy13.h =wt_SDL->Joy12.h; wt_SDL->Joy13.x =wt_SDL->Joy12.x ; wt_SDL->Joy13.y =wt_SDL->Joy12.y + wt_SDL->Joy13.h; SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //BLANC SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->Joy13); //Position par rapport a la touche B wt_SDL->Joy2.w = wt_SDL->rectangleMID.w+wt_SDL->rectangleA.w+wt_SDL->rectangleY.w+30; wt_SDL->Joy2.h = wt_SDL->rectangleMID.h+wt_SDL->rectangleA.h+wt_SDL->rectangleY.h; wt_SDL->Joy2.x = wt_SDL->rectangleB.x + wt_SDL->rectangleX.w + marge; wt_SDL->Joy2.y = wt_SDL->rectangleY.y; SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //BLANC SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->Joy2); wt_SDL->Joy21.w =wt_SDL->Joy2.w; wt_SDL->Joy21.h =wt_SDL->Joy2.h/3; wt_SDL->Joy21.x =wt_SDL->Joy2.x; wt_SDL->Joy21.y =wt_SDL->Joy2.y; SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //BLANC SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->Joy21); wt_SDL->Joy22.w =wt_SDL->Joy21.w; wt_SDL->Joy22.h =wt_SDL->Joy21.h; wt_SDL->Joy22.x =wt_SDL->Joy21.x; wt_SDL->Joy22.y =wt_SDL->Joy21.y + wt_SDL->Joy22.h; SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //BLANC SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->Joy22); wt_SDL->Joy23.w =wt_SDL->Joy22.w; wt_SDL->Joy23.h =wt_SDL->Joy22.h; wt_SDL->Joy23.x =wt_SDL->Joy22.x; wt_SDL->Joy23.y =wt_SDL->Joy22.y + wt_SDL->Joy23.h; SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //BLANC SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->Joy23); } //Bouttons colonne gauche - 6 bouttons { int casew = (wt_SDL->rectangle1.h / 4)*2 , caseh = wt_SDL->rectangle1.h / 6 ; wt_SDL->case1.x = wt_SDL->rectangle1.x; wt_SDL->case1.y = wt_SDL->rectangle1.y; wt_SDL->case1.w = casew ; wt_SDL->case1.h = caseh; SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //GRIS SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->case1); wt_SDL->case2.x = wt_SDL->case1.x; wt_SDL->case2.y = wt_SDL->case1.y + caseh; wt_SDL->case2.w = casew ; wt_SDL->case2.h = caseh; SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->case2); wt_SDL->case3.x = wt_SDL->case2.x; wt_SDL->case3.y = wt_SDL->case2.y + caseh; wt_SDL->case3.w = casew ; wt_SDL->case3.h = caseh; SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->case3); wt_SDL->case4.x = wt_SDL->case3.x; wt_SDL->case4.y = wt_SDL->case3.y + caseh; wt_SDL->case4.w = casew ; wt_SDL->case4.h = caseh; SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->case4); wt_SDL->case5.x = wt_SDL->case4.x; wt_SDL->case5.y = wt_SDL->case4.y + caseh; wt_SDL->case5.w = casew ; wt_SDL->case5.h = caseh; SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //BLANC SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->case5); wt_SDL->case6.x = wt_SDL->case5.x; wt_SDL->case6.y = wt_SDL->case5.y + caseh; wt_SDL->case6.w = casew ; wt_SDL->case6.h = caseh; SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //BLANC SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->case6); } } //Affichage Camera //if(wt_SDL->rectangleCAM != NULL) { wt_SDL->rectangleCAM.x = wt_SDL->rectangle1.x; wt_SDL->rectangleCAM.y = wt_SDL->rectangle1.h + (wt_SDL->rectangle1.y * 2) ; wt_SDL->rectangleCAM.w = wt_SDL->rectangle1.w; wt_SDL->rectangleCAM.h = WINDOW_H - (wt_SDL->rectangle1.h + (wt_SDL->rectangle1.y*3) ); SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //BLANC SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->rectangleCAM); SDL_RenderPresent(wt_SDL->renderer); SDL_RenderPresent(wt_SDL->renderer); } } void ArrierePlan_TTF(Input *input, wt_SDL *wt_SDL) { wt_SDL->Image = SDL_LoadBMP("6wd.bmp"); // SDL SURFACE if (wt_SDL->Image == NULL) { fprintf(fichierLog,"Pas d'image trouver\n\n"); } wt_SDL->Image_fond = SDL_CreateTextureFromSurface(wt_SDL->renderer,wt_SDL->Image); //SDL TEXTURE SDL_RenderCopy(wt_SDL->renderer,wt_SDL->Image_fond,NULL,&wt_SDL->rectangleCAM); { //TITRE int w = 10, h = 10; wt_SDL->STITRE = TTF_RenderText_Blended(wt_SDL->police, " STATION DE PILOTAGE",wt_SDL->couleurNoire); wt_SDL->TTITRE = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->STITRE); SDL_QueryTexture(wt_SDL->TTITRE, NULL, NULL, &w, &h); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->TTITRE, NULL, &wt_SDL->RTITRE); SDL_RenderPresent(wt_SDL->renderer); } { int w = 5, h = 5; //BOUTTON wt_SDL->RAtext = TTF_RenderText_Solid(wt_SDL->police, "A",wt_SDL->couleurNoire); // SURFACE wt_SDL->TRAtext = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->RAtext); //TEXTURE SDL_QueryTexture(wt_SDL->TRAtext, NULL, NULL, &w, &h); wt_SDL->RBtext = TTF_RenderText_Solid(wt_SDL->police, "B",wt_SDL->couleurNoire); wt_SDL->TRBtext = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->RBtext); SDL_QueryTexture(wt_SDL->TRBtext, NULL, NULL, &w, &h); wt_SDL->RXtext = TTF_RenderText_Solid(wt_SDL->police, "X",wt_SDL->couleurNoire); wt_SDL->TRXtext = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->RXtext); SDL_QueryTexture(wt_SDL->TRXtext, NULL, NULL, &w, &h); wt_SDL->RYtext = TTF_RenderText_Solid(wt_SDL->police, "Y",wt_SDL->couleurNoire); wt_SDL->TRYtext = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->RYtext); SDL_QueryTexture(wt_SDL->TRYtext, NULL, NULL, &w, &h); } { int w = 10 , h = 10; wt_SDL->SJoy11 = TTF_RenderText_Blended(wt_SDL->police, "JOYSTICK GAUCHE",wt_SDL->couleurRouge); wt_SDL->TJoy11 = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->SJoy11); SDL_QueryTexture(wt_SDL->TJoy11, NULL, NULL, &w, &h); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->TJoy11, NULL, &wt_SDL->Joy11); wt_SDL->SJoy12 = TTF_RenderText_Blended(wt_SDL->police,"axe X",wt_SDL->couleurNoire); wt_SDL->TJoy12 = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->SJoy12); SDL_QueryTexture(wt_SDL->TJoy12, NULL, NULL, &w, &h); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->TJoy12, NULL, &wt_SDL->Joy12); wt_SDL->SJoy13 = TTF_RenderText_Blended(wt_SDL->police, "axe Y",wt_SDL->couleurNoire); wt_SDL->TJoy13 = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->SJoy13); SDL_QueryTexture(wt_SDL->TJoy13, NULL, NULL, &w, &h); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->TJoy13, NULL, &wt_SDL->Joy13); wt_SDL->SJoy21 = TTF_RenderText_Blended(wt_SDL->police, "JOYSTICK DROITE",wt_SDL->couleurRouge); wt_SDL->TJoy21 = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->SJoy21); SDL_QueryTexture(wt_SDL->TJoy21, NULL, NULL, &w, &h); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->TJoy21, NULL, &wt_SDL->Joy21); wt_SDL->SJoy22 = TTF_RenderText_Blended(wt_SDL->police, "axe X",wt_SDL->couleurNoire); wt_SDL->TJoy22 = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->SJoy22); SDL_QueryTexture(wt_SDL->TJoy22, NULL, NULL, &w, &h); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->TJoy22, NULL, &wt_SDL->Joy22); wt_SDL->SJoy23 = TTF_RenderText_Blended(wt_SDL->police, "axe Y",wt_SDL->couleurNoire); wt_SDL->TJoy23 = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->SJoy23); SDL_QueryTexture(wt_SDL->TJoy23, NULL, NULL, &w, &h); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->TJoy23, NULL, &wt_SDL->Joy23); SDL_RenderPresent(wt_SDL->renderer); } { int w = 10 , h = 10; wt_SDL->Scase1 = TTF_RenderText_Blended(wt_SDL->police, "Raspberry ON/OFF",wt_SDL->couleurRouge); wt_SDL->Tcase1 = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->Scase1); SDL_QueryTexture(wt_SDL->Tcase1, NULL, NULL, &w, &h); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->Tcase1, NULL, &wt_SDL->case1); wt_SDL->Scase2 = TTF_RenderText_Blended(wt_SDL->police, "Arduino ON/OFF",wt_SDL->couleurRouge); wt_SDL->Tcase2 = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->Scase2); SDL_QueryTexture(wt_SDL->Tcase2, NULL, NULL, &w, &h); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->Tcase2, NULL, &wt_SDL->case2); wt_SDL->Scase3 = TTF_RenderText_Blended(wt_SDL->police, "",wt_SDL->couleurRouge); wt_SDL->Tcase3 = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->Scase3); SDL_QueryTexture(wt_SDL->Tcase3, NULL, NULL, &w, &h); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->Tcase3, NULL, &wt_SDL->case3); wt_SDL->Scase4 = TTF_RenderText_Blended(wt_SDL->police, "",wt_SDL->couleurRouge); wt_SDL->Tcase4= SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->Scase4); SDL_QueryTexture(wt_SDL->Tcase4, NULL, NULL, &w, &h); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->Tcase4, NULL, &wt_SDL->case4); wt_SDL->Scase5 = TTF_RenderText_Blended(wt_SDL->police, "Signal Wifi: 00%",wt_SDL->couleurRouge); wt_SDL->Tcase5 = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->Scase5); SDL_QueryTexture(wt_SDL->Tcase5, NULL, NULL, &w, &h); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->Tcase5, NULL, &wt_SDL->case5); wt_SDL->Scase6 = TTF_RenderText_Blended(wt_SDL->police, "Niveau batterie: 00%",wt_SDL->couleurRouge); wt_SDL->Tcase6 = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->Scase6); SDL_QueryTexture(wt_SDL->Tcase6, NULL, NULL, &w, &h); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->Tcase6, NULL, &wt_SDL->case6); } SDL_RenderPresent(wt_SDL->renderer); } //Evenement Clavier-Joystick void updateEvent(Input *input) { static SDL_Event e; while (SDL_PollEvent(&e)) { if (SDL_NumJoysticks() < 1) { fprintf(fichierLog, "Joystick deconnecter pendant l'execution du programme \n\n"); input->quitter = 1; } if (e.type == SDL_KEYDOWN) { if (e.key.keysym.sym == SDLK_ESCAPE) { input->quitter = 1; } } if (e.type == SDL_WINDOWEVENT) { if (e.window.event == SDL_WINDOWEVENT_CLOSE) { input->quitter = 1; } } if (e.type == SDL_JOYAXISMOTION) //ICI on gere les axes du joystique donc JGX, JGY, JDX, JDY { //Si le chapeau Gauche a détecté un mouvement if (e.jaxis.which == 0) { //Si le mouvement a eu lieu sur l'axe des X if (e.jaxis.axis == 0) { //Si l'axe des X est neutre ou à l'intérieur de la "dead zone", je recupere J0X if ((e.jaxis.value > input->DEADZONE_N) && (e.jaxis.value < input->DEADZONE_P)) { input->JGX = 0; } else { if (e.jaxis.value < input->DEADZONE_N) { input->JGX = e.jaxis.value - input->DEADZONE_N; } else if (e.jaxis.value > input->DEADZONE_P) { input->JGX = e.jaxis.value - input->DEADZONE_P ; } } } //Si le mouvement a eu lieu sur l'axe des Y, je recupere J0Y else if (e.jaxis.axis == 1) { //Si l'axe des Y est neutre ou à l'intérieur de la "dead zone" if ((e.jaxis.value > input->DEADZONE_N) && (e.jaxis.value < input->DEADZONE_P)) { input->JGY = 0; } else { if (e.jaxis.value < input->DEADZONE_N) { input->JGY = -(e.jaxis.value - input->DEADZONE_N); } else if (e.jaxis.value > input->DEADZONE_P) { input->JGY = -(e.jaxis.value - input->DEADZONE_P); } } } //Si le mouvement a eu lieu sur l'axe des X if (e.jaxis.axis == 2) { //Si l'axe des X est neutre ou à l'intérieur de la "dead zone", je recupere J0X if ((e.jaxis.value > input->DEADZONE_N) && (e.jaxis.value < input->DEADZONE_P)) { input->JDX = 0; } else { if (e.jaxis.value < input->DEADZONE_N) { input->JDX = e.jaxis.value - input->DEADZONE_N; } else if (e.jaxis.value > input->DEADZONE_P) { input->JDX = e.jaxis.value - input->DEADZONE_P; } } } //Si le mouvement a eu lieu sur l'axe des Y, je recupere J0Y else if (e.jaxis.axis == 3) { //Si l'axe des Y est neutre ou à l'intérieur de la "dead zone" if ((e.jaxis.value > input->DEADZONE_N) && (e.jaxis.value < input->DEADZONE_P)) { input->JDY = 0; } else { if (e.jaxis.value < input->DEADZONE_N) { input->JDY = -(e.jaxis.value - input->DEADZONE_N); } else if (e.jaxis.value > input->DEADZONE_P) { input->JDY = -(e.jaxis.value - input->DEADZONE_P); } } } } } if (e.type == SDL_JOYBUTTONDOWN) //ICI on gere les bouttons BOUTTON APPUYER { if (e.jbutton.button == 10) { input->BOUTTON_A = 1; } else if (e.jbutton.button == 11) { input->BOUTTON_B = 1; } else if (e.jbutton.button == 12) { input->BOUTTON_X = 1; } else if (e.jbutton.button == 13) { input->BOUTTON_Y = 1; } else if (e.jbutton.button == 8) { input->BOUTTON_LB = 1; input->mode_pilotage =1; //tableau[8]= 1; } else if (e.jbutton.button == 9) { input->BOUTTON_RB =1; input->mode_pilotage =2; //tableau[9]= 1; } else if ( e.jbutton.button == 4) { input->BOUTTON_START=1; } else if (e.jbutton.button == 5) { input->BOUTTON_BACK = 1; input->quitter = 1; } } else if (e.type == SDL_JOYBUTTONUP) { if (e.jbutton.button == 10) { input->BOUTTON_A = 0; } else if (e.jbutton.button == 11) { input->BOUTTON_B = 0; } else if (e.jbutton.button == 12) { input->BOUTTON_X = 0; } else if (e.jbutton.button == 13) { input->BOUTTON_Y = 0; } else if (e.jbutton.button == 8) { input->BOUTTON_LB = 0; } else if (e.jbutton.button == 9) { input->BOUTTON_RB =0; } else if ( e.jbutton.button == 4) { input->BOUTTON_START=0; } else if (e.jbutton.button == 5) { input->BOUTTON_BACK = 0; } } } } //Mode de pilotage void modepilotage2(Input *input, wt_SDL *wt_SDL) { input->JGX_Max = 24767 ; input->JGY_Max = 24767 ; input->JDX_Max = 24767 ; input->JDY_Max = 24767 ; input->JGX_Mx = (100 * input->JGX) / input->JGX_Max; input->JGY_Mx = (100 * input->JGY) / input->JGY_Max; input->JDX_Mx = (100 * input->JDX) / input->JDX_Max; input->JDY_Mx = (100 * input->JDY) / input->JDY_Max; int i; int tableauMD2[7]= {input->mode_pilotage,input->JGY_Mx,input->JDY_Mx,input->BOUTTON_A,input->BOUTTON_B,input->BOUTTON_Y,input->BOUTTON_X}; for(i=0; i < 7; i++) { printf("= %d",tableauMD2[i]); } int w = 5 , h = 5; if(input->BOUTTON_X == 1) { SDL_SetRenderDrawColor(wt_SDL->renderer,0,0,255,0); //BLEU SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->rectangleX); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->TRXtext, NULL, &wt_SDL->rectangleX); SDL_RenderPresent(wt_SDL->renderer); SDL_DestroyTexture(wt_SDL->TRXtext); } else { //SDL_DestroyTexture(wt_SDL->TRXtext); SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->rectangleX); SDL_RenderPresent(wt_SDL->renderer); } if(input->BOUTTON_Y == 1) { SDL_SetRenderDrawColor(wt_SDL->renderer,255,128,0,0); //ORANGE SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->rectangleY); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->TRYtext, NULL, &wt_SDL->rectangleY); SDL_RenderPresent(wt_SDL->renderer); SDL_DestroyTexture(wt_SDL->TRYtext); } else { SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->rectangleY); SDL_RenderPresent(wt_SDL->renderer); } if(input->BOUTTON_A == 1) { SDL_SetRenderDrawColor(wt_SDL->renderer,0,255,64,0); //VERT SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->rectangleA); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->TRAtext, NULL, &wt_SDL->rectangleA); SDL_RenderPresent(wt_SDL->renderer); SDL_DestroyTexture(wt_SDL->TRAtext); } else { SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //VERT SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->rectangleA); SDL_RenderPresent(wt_SDL->renderer); } if(input->BOUTTON_B == 1) { SDL_SetRenderDrawColor(wt_SDL->renderer,255,128,128,0); SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->rectangleB); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->TRBtext, NULL, &wt_SDL->rectangleB); SDL_RenderPresent(wt_SDL->renderer); SDL_DestroyTexture(wt_SDL->TRBtext); } else { SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->rectangleB); SDL_RenderPresent(wt_SDL->renderer); } SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //BLANC SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->Joy22); wt_SDL->SJoy22 = TTF_RenderText_Blended(wt_SDL->police, "MODE 2",wt_SDL->couleurNoire); wt_SDL->TJoy22 = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->SJoy22); SDL_QueryTexture(wt_SDL->TJoy22, NULL, NULL, &w, &h); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->TJoy22, NULL, &wt_SDL->Joy22); SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //BLANC SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->Joy12); wt_SDL->SJoy12 = TTF_RenderText_Blended(wt_SDL->police,"MODE 2",wt_SDL->couleurNoire); wt_SDL->TJoy12 = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->SJoy12); SDL_QueryTexture(wt_SDL->TJoy12, NULL, NULL, &w, &h); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->TJoy12, NULL, &wt_SDL->Joy12); //JGY JGYY sprintf(input->JGYY, "Y: %d",input->JGY); SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //BLANC SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->Joy13); wt_SDL->SJoy13 = TTF_RenderText_Solid(wt_SDL->police,input->JGYY,wt_SDL->couleurRouge); wt_SDL->TJoy13 = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->SJoy13); SDL_QueryTexture(wt_SDL->TJoy13, NULL, NULL, &w, &h); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->TJoy13, NULL, &wt_SDL->Joy13); //JDY JDYY sprintf(input->JDYY, "Y: %d",input->JDY); SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //BLANC SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->Joy23); wt_SDL->SJoy23 = TTF_RenderText_Solid(wt_SDL->police,input->JDYY,wt_SDL->couleurRouge); wt_SDL->TJoy23 = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->SJoy23); SDL_QueryTexture(wt_SDL->TJoy23, NULL, NULL, &w, &h); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->TJoy23, NULL, &wt_SDL->Joy23); SDL_RenderPresent(wt_SDL->renderer); SDL_DestroyTexture(wt_SDL->TJoy23); SDL_DestroyTexture(wt_SDL->TJoy13); SDL_DestroyTexture(wt_SDL->TJoy12); SDL_DestroyTexture(wt_SDL->TJoy22); SDL_FreeSurface(wt_SDL->SJoy23); SDL_FreeSurface(wt_SDL->SJoy13); SDL_FreeSurface(wt_SDL->SJoy12); SDL_FreeSurface(wt_SDL->SJoy22); } void modepilotage1(Input *input, wt_SDL *wt_SDL) { input->JGX_Max = 24767 ; input->JGY_Max = 24767 ; input->JDX_Max = 24767 ; input->JDY_Max = 24767 ; input->JGX_Mx = (100 * input->JGX) / input->JGX_Max; input->JGY_Mx = (100 * input->JGY) / input->JGY_Max; input->JDX_Mx = (100 * input->JDX) / input->JDX_Max; input->JDY_Mx = (100 * input->JDY) / input->JDY_Max; int tableauMD1[9]= {input->mode_pilotage,input->JGX_Mx,input->JGY_Mx,input->JDX_Mx,input->JDY_Mx,input->BOUTTON_A,input->BOUTTON_B,input->BOUTTON_Y,input->BOUTTON_X}; int i; for(i=0; i < 8; i++) { printf("= %d",tableauMD1[i]); } int w = 5 , h = 5; // if(input->BOUTTON_X == 1) { SDL_SetRenderDrawColor(wt_SDL->renderer,0,0,255,0); //BLEU SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->rectangleX); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->TRXtext, NULL, &wt_SDL->rectangleX); SDL_RenderPresent(wt_SDL->renderer); } else { //SDL_DestroyTexture(wt_SDL->TRXtext); SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->rectangleX); SDL_RenderPresent(wt_SDL->renderer); } if(input->BOUTTON_Y == 1) { SDL_SetRenderDrawColor(wt_SDL->renderer,255,128,0,0); //ORANGE SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->rectangleY); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->TRYtext, NULL, &wt_SDL->rectangleY); SDL_RenderPresent(wt_SDL->renderer); } else { SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->rectangleY); SDL_RenderPresent(wt_SDL->renderer); } if(input->BOUTTON_A == 1) { SDL_SetRenderDrawColor(wt_SDL->renderer,0,255,64,0); //VERT SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->rectangleA); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->TRAtext, NULL, &wt_SDL->rectangleA); SDL_RenderPresent(wt_SDL->renderer); } else { SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //VERT SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->rectangleA); SDL_RenderPresent(wt_SDL->renderer); } if(input->BOUTTON_B == 1) { SDL_SetRenderDrawColor(wt_SDL->renderer,255,128,128,0); SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->rectangleB); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->TRBtext, NULL, &wt_SDL->rectangleB); SDL_RenderPresent(wt_SDL->renderer); } else { SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->rectangleB); SDL_RenderPresent(wt_SDL->renderer); } //JGX sprintf(input->JGXX, "X %d",input->JGX); SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //BLANC SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->Joy12); wt_SDL->SJoy12 = TTF_RenderText_Solid(wt_SDL->police,input->JGXX,wt_SDL->couleurRouge); wt_SDL->TJoy12 = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->SJoy12); SDL_QueryTexture(wt_SDL->TJoy12, NULL, NULL, &w, &h); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->TJoy12, NULL, &wt_SDL->Joy12); //JGY JGYY sprintf(input->JGYY, "Y %d",input->JGY); SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //BLANC SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->Joy13); wt_SDL->SJoy13 = TTF_RenderText_Solid(wt_SDL->police,input->JGYY,wt_SDL->couleurRouge); wt_SDL->TJoy13 = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->SJoy13); SDL_QueryTexture(wt_SDL->TJoy13, NULL, NULL, &w, &h); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->TJoy13, NULL, &wt_SDL->Joy13); //JDX JDXX sprintf(input->JDXX, "X %d",input->JDX); SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //BLANC SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->Joy22); wt_SDL->SJoy22 = TTF_RenderText_Solid(wt_SDL->police,input->JDXX,wt_SDL->couleurRouge); wt_SDL->TJoy22 = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->SJoy22); SDL_QueryTexture(wt_SDL->TJoy22, NULL, NULL, &w, &h); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->TJoy22, NULL, &wt_SDL->Joy22); //JDY JDYY sprintf(input->JDYY, "Y %d",input->JDY); SDL_SetRenderDrawColor(wt_SDL->renderer,255,255,255,255); //BLANC SDL_RenderFillRect(wt_SDL->renderer, &wt_SDL->Joy23); wt_SDL->SJoy23 = TTF_RenderText_Solid(wt_SDL->police,input->JDYY,wt_SDL->couleurRouge); wt_SDL->TJoy23 = SDL_CreateTextureFromSurface(wt_SDL->renderer, wt_SDL->SJoy23); SDL_QueryTexture(wt_SDL->TJoy23, NULL, NULL, &w, &h); SDL_RenderCopy(wt_SDL->renderer, wt_SDL->TJoy23, NULL, &wt_SDL->Joy23); SDL_RenderPresent(wt_SDL->renderer); SDL_DestroyTexture(wt_SDL->TJoy23); SDL_DestroyTexture(wt_SDL->TJoy22); SDL_DestroyTexture(wt_SDL->TJoy13); SDL_DestroyTexture(wt_SDL->TJoy12); SDL_FreeSurface(wt_SDL->SJoy23); SDL_FreeSurface(wt_SDL->SJoy22); SDL_FreeSurface(wt_SDL->SJoy13); SDL_FreeSurface(wt_SDL->SJoy12); }
fonction.h
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> #include <winsock2.h> #include <SDL2/SDL.h> #include <SDL2/SDL_ttf.h> #define WINDOW_W 1200 #define WINDOW_H 1000 #define PRECISION 0.001 #define PI 3.14159265 FILE* fichierLog; //Structure qui gere les evenements joystick, clavier typedef struct Input Input; struct Input { SDL_Joystick* joystick; int quitter ; int quittermode ; char data[200]; char JGXX[10]; char JGYY[10]; char JDXX[10]; char JDYY[10]; int JGX_Max ; //calibration int JGY_Max ; //calibration int JDX_Max ; //calibration int JDY_Max ; //calibration int JGX_Mx ; int JGY_Mx ; int JDX_Mx ; int JDY_Mx ; int JGX ; //1 int JGY ; //2 int JDX ; //3 int JDY ; //4 int BOUTTON_A; //5- 0 Pour Boutton Relacher int BOUTTON_B ;//6 int BOUTTON_Y ;//7 int BOUTTON_X ;//8 int BOUTTON_LB ; //9 boutton Gauche int BOUTTON_RB ; //10 boutton droite int BOUTTON_START ;//11 int BOUTTON_BACK ; //12 //Zone morte int DEADZONE_N ; int DEADZONE_P; //Mode de pilotage int mode_pilotage; }; typedef struct wt_SDL wt_SDL; struct wt_SDL { //Fenetre principale et Render SDL_Window *screen; SDL_Renderer *renderer; SDL_Rect test; SDL_Surface *Stest; SDL_Texture *Ttest; SDL_Rect RTITRE; SDL_Surface *STITRE; SDL_Texture *TTITRE; SDL_Rect calibrer; SDL_Surface *Scalibrer; SDL_Texture *Tcalibrer; SDL_Rect cal_titre; SDL_Surface *Scal_titre; SDL_Texture *Tcal_titre; //Partie commande (haut) SDL_Rect rectangle1; SDL_Rect rectangleMID, rectangleA, rectangleY, rectangleX, rectangleB, Joy1 , Joy11, Joy12, Joy13, Joy2, Joy21, Joy22, Joy23 ; SDL_Surface *RAtext, *RYtext, *RXtext , *RBtext, *SJoy1, *SJoy11, *SJoy12, *SJoy13, *SJoy2, *SJoy21, *SJoy22, *SJoy23; SDL_Texture *TRAtext, *TRYtext, *TRXtext , *TRBtext, *TJoy1, *TJoy11, *TJoy12, *TJoy13, *TJoy2, *TJoy21, *TJoy22, *TJoy23; //Colonne gauche SDL_Rect case1, case2, case3, case4, case5, case6; SDL_Surface *Scase1, *Scase2, *Scase3, *Scase4, *Scase5, *Scase6; SDL_Texture *Tcase1, *Tcase2, *Tcase3, *Tcase4, *Tcase5, *Tcase6; //Partie Camera SDL_Rect rectangleCAM; //SDL_Texture SDL_Surface *Image; //Surface pour image de fond SDL_Texture *Image_fond; // image de fond //TTF SDL_Color couleurNoire; SDL_Color couleurRouge; SDL_Color couleurBlanche; TTF_Font *police; }; //Declaration des fonctions void initialisation(const char *titre,wt_SDL *wt_SDL); void RAZ_input(Input *input); void RAZ_wt_SDL(wt_SDL *wt_SDL); void ArrierePlan(Input *input, wt_SDL *wt_SDL); void ArrierePlan_TTF(Input *input, wt_SDL *wt_SDL); void cleanup(wt_SDL *wt_SDL); void updateEvent(Input *input); void modepilotage1(Input *input, wt_SDL *wt_SDL); void modepilotage1(Input *input, wt_SDL *wt_SDL);
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
poparnassus
Messages postés
426
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019
30
30 avril 2016 à 22:39
30 avril 2016 à 22:39
µBonjour Dal voudrais -tu m'aider sur l'utilisation des sockets, j'ai du mal a comprendre ..
Sur ce topic:
https://forums.commentcamarche.net/forum/affich-33427963-client-serveur-utilisation-des-sockets#p33430485
Sur ce topic:
https://forums.commentcamarche.net/forum/affich-33427963-client-serveur-utilisation-des-sockets#p33430485
12 avril 2016 à 13:58
Quelque chose que je fais mal mais je ne sais pas quoi...
Ma structure affichage
Ma fonction initialisation affichage
|warning: unused variable 'rectangle1' [-Wunused-variable]|
J'ai la meme chose pour toute mes rectangle1 , A, B, X, Y
Modifié par [Dal] le 12/04/2016 à 14:41
c'est à dire ?
bon, on va passer en mode boule de cristal...
Je vois qu'à l'appel de la fonction intialisationAffichage(), tu passes en argument un pointeur sur Affichage, puisque ton prototype est
Question : lors de l'appel de cette fonction, est-ce que tu passes un pointeur sur une zone mémoire que tu as allouée, d'une façon ou d'une autre ?
Dal
12 avril 2016 à 17:23
Modifié par poparnassus le 12/04/2016 à 18:43
Mais je ne sais toujours pas comment le faire avec des pointeurs!
Modifié par [Dal] le 12/04/2016 à 21:23
Comme tu veux un pointeur sur cette structure, il faut allouer la mémoire correspondant à la taille de la struct.
Comme cette struc comporte elle-même des pointeurs, il faudra les faire pointer vers un espace mémoire.
Pour ArrierePlan, j'imagine que c'est SDL_CreateTexture() qui allouera la mémoire et retournera un pointeur sur SDL_Texture.
Pour les pointeurs sur SDL_Rect, c'est à toi d'allouer la mémoire.
Voilà un exemple limité, qui je l'espère t'éclairera, utilisant ta structure Affichage.
Dal