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 :

vitesse de rafraichissement SDL_KEYDOWN


Sujet :

SDL

  1. #21
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2008
    Messages : 308
    Points : 622
    Points
    622
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef struct vaisseau vaisseau;
    ce n'est pas utile que si il y a un pointeur vers un vaisseau dans la structure?? comme pour une liste chainée par exemple.

  2. #22
    Membre éclairé Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 717
    Points : 741
    Points
    741
    Par défaut
    POurriez vous dvlper svp ? je ne comprends pas bien

    SofEvans merci à toi j'applique ça rapidement

  3. #23
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Citation Envoyé par bebaijhi Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef struct vaisseau vaisseau;
    ce n'est pas utile que si il y a un pointeur vers un vaisseau dans la structure?? comme pour une liste chainée par exemple.
    Non, du tout.

    Le typedef permet de faire un alias. Cela n'a rien a voir avec les pointeurs.

    Par exemple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
    int main()
    {
        ...
        switch(event.type)
        { 
            case SDL_KEYDOWN :
                    switch (event.key.keysym.sym)
                    {
                         case SDLK_LEFT :
                              ...
                              break;
                    }
                break;
        }
        ...
    }
    Ici, on a utilisé SDLK_LEFT.
    Si je fais ceci, c'est valide :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     
    typedef SDLK_LEFT fleche_gauche;
     
    int main()
    {
        ...
        switch(event.type)
        { 
            case SDL_KEYDOWN :
                    switch (event.key.keysym.sym)
                    {
                         /* Tout a fait valide et fera la meme chose que SDLK_LEFT */
                         case fleche_gauche :
                              ...
                              break;
                    }
                break;
        }
        ...
    }
    On utilise systematiquement les typedef avec les structures pour eviter de re-ecrire struct.

    Dans le cas des liste chainé, on utilise typedef pour la structure, et un typedef pour un pointeur vers la structure (ou un seul typedef, ca depend)

  4. #24
    Membre éclairé Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 717
    Points : 741
    Points
    741
    Par défaut
    EDIT : C'est bon j'ai rien dit, ça marche

    J'y comprend rien avec ces include :

    constantes.h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #ifndef DEF_CONSTANTES
    #define DEF_CONSTANTES
     
        #define HAUTEUR_ECRAN                800
        #define LARGEUR_ECRAN                800
        #define VITESSE_MAX_VAIS               2
        #define ACCEL_VAIS                  0.03
     
    #endif
    vaisseau.h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #ifndef VAISSEAU_H_INCLUDED
    #define VAISSEAU_H_INCLUDED
     
    typedef struct vaisseau vaisseau;
    struct vaisseau
    {
        //SDL_Surface *image;
        //SDL_Rect position;
     
        int direction;
        int acceleration;
        double uniteDeplacement;
    }
     
     
    void deplacerVaisseau(int *continuer, int acceleration, SDL_Rect *positionObjet, double *vit, SDL_Event event);
     
    #endif // VAISSEAU_H_INCLUDED
    vaisseau.c :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #include "vaisseau.h"
     
    void deplacerVaisseau(int *continuer, int acceleration, SDL_Rect *positionObjet, double *vit, SDL_Event event){
     
        switch(event.key.keysym.sym)
            {
                    case SDLK_RIGHT: // Flèche droite
                        if((*positionObjet).x + *vit <= LARGEUR_ECRAN)
                            (*positionObjet).x += *vit;
                        break;
                    case SDLK_LEFT: // Flèche gauche
                        (*positionObjet).x -= *vit;
                        break;
                    case SDLK_ESCAPE: // arrêter le jeu
                        *continuer = 0;
                        break;
            }
     
        if(acceleration)
        {
            if(*vit < VITESSE_MAX_VAIS){
                *vit += ACCEL_VAIS;
        }
     
        }else{
            if((*vit - ACCEL_VAIS) > 0){
                *vit -= ACCEL_VAIS;
                if(*vit < ACCEL_VAIS)
                        *vit = 0;
     
            }
            //fprintf(stderr, "%f\n", *vit);
        }
    }
    main.cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <time.h>
    #include <string.h>
    #include <ctype.h>
    #include <SDL/SDL.h>
    #include <SDL_image.h>
     
    #include "constantes.h"
    #include "vaisseau.h"
     
    //void initImages;
     
    int main(int argc, char *argv[])
    {
        SDL_Surface *ecran = NULL, *imgVaisseau = NULL;
        SDL_Rect positionFond, positionVaisseau;
        SDL_Event event;
     
        int continuer = 1;
     
        struct vaisseau vaisseau1;
            vaisseau1.direction = 0;
            vaisseau1.acceleration = 0;
            vaisseau1.vitesse = 0;
     
        //positionFond.x = 0; positionFond.y = 0;
     
        SDL_Init(SDL_INIT_VIDEO);
        SDL_WM_SetIcon(IMG_Load("images/sdl_icone.bmp"), NULL);
        ecran = SDL_SetVideoMode(LARGEUR_ECRAN, HAUTEUR_ECRAN, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
        SDL_WM_SetCaption("Casse briques", NULL);
        //imageDeFond = IMG_Load("images/hendrix.bmp");
        imgVaisseau = IMG_Load("images/vaisseau.png");
        //positionCurseur.x = ecran->w / 2 - imgCurseur->w / 2;
        positionVaisseau.x = 0;
        positionVaisseau.y = HAUTEUR_ECRAN - 80 ;
     
        SDL_EnableKeyRepeat(50, 50);
     
        while (continuer)
        {
     
            while(SDL_PollEvent(&event))
            {
     
                switch(event.type)
                {
                    case SDL_QUIT:    // arrêter le jeu
                        continuer = 0;
                        break;
                    case SDL_KEYDOWN:
                        deplacerVaisseau(&continuer, 1, &positionVaisseau, &(vaisseau1.vitesse), event);
                        break;
                    case SDL_KEYUP:
                        deplacerVaisseau(&continuer, 0, &positionVaisseau, &(vaisseau1.vitesse), event);
                        break;
                }
     
            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 105, 105, 105));
            //SDL_BlitSurface(imageDeFond, NULL, ecran, &positionFond);
            SDL_BlitSurface(imgVaisseau, NULL, ecran, &positionVaisseau);
            SDL_Flip(ecran);
     
            //fprintf(stderr, "ratio = %f\n", ratioXCursTN);
            }
        }
     
        //SDL_FreeSurface(imageDeFond);
        SDL_FreeSurface(imgVaisseau);
        SDL_Quit();
     
        return EXIT_SUCCESS;
    }
    Au moment de la compilation le debugger me dit qu'il y a moutle variables non déclarées dans ma fonction dans vaisseau.c, or ce fichier est lu au moment de l'appel de la fonction dans main.cpp après que toutes les variables aient été initialisées non ?

    Edit : un truc encore plus HALUCINANT c'est que si je supprime la ligne #include "vaisseau.h" et que je sauvegarde, le debugger me trouve qd même des erreurs dans vaisseau.h ?

  5. #25
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2008
    Messages : 308
    Points : 622
    Points
    622
    Par défaut
    ouai, j'ai pas bien regardé, je pensait que tu faisais juste une pré-déclaration.

    perso je fait comme ça plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef struct {
        SDL_Surface *image;
        SDL_Rect position;
     
        int direction;
        int acceleration;
        double uniteDeplacement;
    } vaisseau;
    ça fait juste une ligne en moins...

  6. #26
    Membre éclairé Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 717
    Points : 741
    Points
    741
    Par défaut
    Veuillez m'escuser si ce post est un peu un fourre-tout autour de ce projet mais je ne suis pas pour autant hors sujet puisque la finalité est qd même de régler ce pb de fluidité.

    J'ai une question concernant l'arborescence du projet :

    En fait si à la compilation tous les .h sont lus en premiers (prototypes, structures, define, etc...) et qu'en suite viennent le main.c puis les autre .c (ces derniers comprennant les fonctions) alors pourquoi faut il inclure via #include tartampion.h dans tartampion.c ?

    Ensuite si dans main.c j'inclue des fichiers de librairies pourquoi dois de nouveau les inclure dans les autres .c pour pouvoir les utiliser ? (si les .c sont "lus" après le main.c lors de la compilation ils devraient "hériter" des fonctions et variables contenus dans ce dernier, je me trompe ?

  7. #27
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2008
    Messages : 308
    Points : 622
    Points
    622
    Par défaut
    c'est peut etre pour simplifier le travail du compilo, s'il devait chercher dans le tous les fichiers d'un projet, qui peut très bien avoir un millier de classes, ça prendrai surement un peu de temps.

    C'est juste une supposition, si ça se trouve il y a une autre raison plus logique...

    si sa t'amuse t'as qu'a tout mètre dans le même fichier pour pas t'embetté avec les includes xD (mauvais conseil inside)

  8. #28
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    En fait c'est pas ça...

    Tous les fichiers .c sont compilés séparément. Et ça donne des fichiers .o . Donc le compilateur ne lit que les fichiers.c, dans lesquels sont inclus les fichiers.h nécessaires. (de plus #include machin.h ne dit pas au compilateur de regarder le fichier.h, en fait ça met carrément le fichier.h à l'endroit du #include correspondant dans le fichier .c)

    Une fois que le compilateur a compilé tous les fichiers .c en fichiers .o, il rassemble tous les fichiers .o ensembles pour faire un exécutable. Et c'est là que s'il manque des trucs il râle avec des choses du style "undefined reference" ...

  9. #29
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2008
    Messages : 308
    Points : 622
    Points
    622
    Par défaut
    comme quoi j'avais raison!! il y a bien une explication plus logique...

  10. #30
    Membre éclairé Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 717
    Points : 741
    Points
    741
    Par défaut
    Bravo coyotte

Discussions similaires

  1. image à la vitesse du rafraichissement
    Par arbre69 dans le forum Projets
    Réponses: 6
    Dernier message: 04/10/2012, 22h03
  2. [debutant] vitesse de rafraichissement directX
    Par loup_precaire dans le forum DirectX
    Réponses: 2
    Dernier message: 13/08/2010, 21h08
  3. Problème vitesse de rafraichissement sous sdl
    Par sieuzac dans le forum SDL
    Réponses: 16
    Dernier message: 31/05/2007, 14h59
  4. Vitesse de rafraichissement des données
    Par StarMusic dans le forum Bases de données
    Réponses: 2
    Dernier message: 30/09/2005, 10h20
  5. Probleme de rafraichissement d'un BDGrid
    Par marmotte dans le forum Bases de données
    Réponses: 10
    Dernier message: 28/05/2004, 18h07

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