IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

aider moi svp je craque ! sdl_gfx


Sujet :

SDL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 62
    Points : 31
    Points
    31
    Par défaut aider moi svp je craque ! sdl_gfx
    re Bonjour,

    désolé d'insister, mais j'ai beau chercher dans tous les coins, impossible de relier les points que je fais apparaitre dans ma fenêtre SDL; sdl_gfx peut-elle m'apporter un élément de réponse ?

    En fait je veux tout bêtement relier 2 points entre eux par une droite autre qu'horizontale ou verticale.

    Merci de votre aide

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Je ne connais pas trop SDL_gfx mais tu peux peut-être voir le tutoriel suivant: http://anomaly.developpez.com/tutoriel/sdl/partie2/#L3
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 62
    Points : 31
    Points
    31
    Par défaut demande de déblocage du programme svp
    j'ai déja été voir, c'est le sujet de ma précédente question !

    j'ai décidé de supprimer la fonction line qui ne marche pas et de faire relier les points par ce code, seul pb, ca ne marche pas et l'erreur m'échappe/ le programme tourne, mais il ne ferme durement et les 2 points ne sont pas reliés.

    Merci de l'aide que vous pourrez m'apporter

    voici le code complet :

    #include<stdlib.h>
    #include<stdio.h>
    #include<SDL/SDL.h>

    void pause();

    int main (int argc, char *argv[])
    {
    SDL_Surface*ecran=NULL;
    SDL_Init(SDL_INIT_VIDEO);
    ecran = SDL_SetVideoMode(640,480,32,SDL_HWSURFACE);
    SDL_WM_SetCaption("Projet info", NULL);

    /*------------création du repère du graph-----------*/
    Uint32 rouge=SDL_MapRGB(ecran->format,48,50,135);
    SDL_FillRect(ecran, NULL,rouge);
    SDL_Flip(ecran);

    SDL_Surface*rectangle=NULL;
    rectangle=SDL_CreateRGBSurface(SDL_SWSURFACE,45,45,32,0,0,0,0);
    Uint32 jaune = SDL_MapRGB(ecran->format,0,255,0);
    SDL_FillRect(rectangle,NULL,jaune);
    SDL_Rect position;
    position.x = 10;
    position.y = 10;
    SDL_BlitSurface(rectangle, NULL,ecran,&position);
    SDL_Flip(ecran);
    SDL_FreeSurface(rectangle);

    SDL_Surface*rect=NULL;
    rect=SDL_CreateRGBSurface(SDL_SWSURFACE,45,45,32,0,0,0,0);
    SDL_FillRect(rect,NULL,jaune);
    SDL_Rect pos;
    pos.x = 200;
    pos.y = 200;
    SDL_BlitSurface(rect, NULL,ecran,&pos);
    SDL_Flip(ecran);
    SDL_FreeSurface(rect);




    while ( (pos.x )- position.x >1 )
    {
    int j=0;
    SDL_Surface*ajout=NULL;
    ajout=SDL_CreateRGBSurface(SDL_SWSURFACE,2,2,32,0,0,0,0);
    SDL_FillRect(ajout,NULL,jaune);
    SDL_Rect posrr;
    posrr.x = position.x+j;
    posrr.y = position.y+j;
    SDL_BlitSurface(ajout, NULL,ecran,&posrr);
    SDL_Flip(ecran);
    SDL_FreeSurface(ajout);
    }




    pause();

    SDL_Quit();

    return 0;
    }

    /*---------Fin SDL----------*/
    void pause()
    {
    int continuer=1;
    SDL_Event event;

    while (continuer)
    {SDL_WaitEvent(&event);
    switch (event.type)
    {
    case SDL_QUIT:continuer=0;
    }
    }
    }

  4. #4
    Membre confirmé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Points : 546
    Points
    546
    Par défaut
    si tu flip ton ecran a chaque fois que tu traces un point, ca va pas te donner grand chose .
    La fonction SDL_Flip te permet d'afficher le "résultat" de tous tes dessins une fois que tu as fini de dessiner ! En aucun cas, cela affiche le(s) point(s) que tu viens de rajouter...
    Donc: tu dessines tout, puis tu Flip une seule fois

    Il y aurait beaucoup d'autres remarques à te faire, comme ta surface ajout dans ta boucle que tu détruis et recrée à chaque boucle alors que c'est exactement le même type de surface à chaque fois.
    Mindiell
    "Souvent, femme barrit" - Elephant man

  5. #5
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Bonjour voici mes remarques sur ce code :

    - Aucun test vérifiant le bon fonctionnement des fonctions SDL, par exemple SDL_Init, SDL_SetVideoMode, etc.
    - On fait un seul flip entre deux affichages. Le plus simple est d'avoir une boucle générale qui vérifie les événements et ensuite fait le rendu à la place d'avoir une fonction pause comme toi. Mais si tu y tiens, tu mets seulement un SDL_Flip avant ta fonction pause.
    - rect et rectangle ont la même taille, utilise donc un seul des deux et avec un SDL_FillRect change de couleur à la place d'allouer et libérer inutilement.

    - Ta boucle est entièrement fausse. Je vais détailler un peu plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while ( (pos.x )- position.x >1 )
    - Condition d'arrêt pas claire, rien ne prouve que cela sera vrai un jour.

    - Création d'une variable locale qui n'est jamais modifié, une constante aurait suffie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SDL_Surface*ajout=NULL;
    ajout=SDL_CreateRGBSurface(SDL_SWSURFACE,2,2,32,0,0,0,0);
    SDL_FillRect(ajout,NULL,jaune);
    - Aucun test sur le retour de la fonction SDL_CreateRGBSurface

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SDL_Rect posrr;
    posrr.x = position.x+j;
    posrr.y = position.y+j;
    - Aucun intérêt, j==0 donc on aurait pu utiliser position directement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SDL_BlitSurface(ajout, NULL,ecran,&posrr);
    SDL_Flip(ecran);
    - Un seul SDL_Flip pour tout le rendu du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SDL_FreeSurface(ajout);
    }
    - Une allocation et désallocation abusive, la même surface pourrait servir pour toutes les itérations
    - Aucune incrémentation/décrémentation ou changement d'une variable qui laissera la boucle se terminer.

    - Aucune utilité, ceci obscurcit le code encore plus puisque tu as juste une petite boucle qui attend un SDL_QUIT. Autant le mettre dans le main...

    SDL_Quit();

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    while (continuer)
    {SDL_WaitEvent(&event);
    switch (event.type)
    {
           case SDL_QUIT:continuer=0;
    }
    }
    }
    - Pas de test sur le retour de SDL_WaitEvent
    - Pas de cas par défaut.

    Jc

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. aider moi svp
    Par Damish dans le forum ASP
    Réponses: 15
    Dernier message: 27/09/2006, 14h17
  2. aider moi svp mon ordinateur plante
    Par nouri.moudhffar dans le forum Windows XP
    Réponses: 15
    Dernier message: 04/08/2006, 22h05
  3. aider moi SVP
    Par FRIBGANE dans le forum ASP
    Réponses: 3
    Dernier message: 19/10/2005, 16h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo