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

C++ Discussion :

Mouvement d'un point avec la SDL


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ergonome
    Inscrit en
    Février 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Février 2017
    Messages : 13
    Par défaut Mouvement d'un point avec la SDL
    Bonjours à tous

    je débute dans la programmation et j'ai comme projet de faire apparaître et disparaître un point à des endroit aléatoire. j'utilise SDL comme interface graphique. Et pour info je programme sous rasbian dans le terminal nano

    voici ce que j'ai déja réussi a faire :

    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
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
     
    int main( int argc, char *argv[ ] )
    {
        SDL_Surface *screen;
        int lastrender = 0;
        if( SDL_Init( SDL_INIT_JOYSTICK | SDL_INIT_VIDEO ) == -1 )
        {
            printf( "Can't init SDL:  %s\n", SDL_GetError( ) );
            return EXIT_FAILURE;
        }
     
        atexit( SDL_Quit );
        screen = SDL_SetVideoMode( 640, 480, 16, SDL_HWSURFACE );
     
        if( !screen)
        {
            printf( "Can't set video mode: %s\n", SDL_GetError( ) );
            return EXIT_FAILURE;
        }
     
        SDL_Rect position;
        SDL_Surface *rectangle = NULL;
        rectangle = SDL_CreateRGBSurface(SDL_HWSURFACE, 20, 20, 16, 0, 0, 0, 0);
     
        position.x = screen->h/2;
        position.y = screen->h/2;
        bool jeu = false;
        SDL_Event event;
        while(!jeu)
        {
        SDL_FillRect(rectangle, NULL, SDL_MapRGB(screen->format, 255, 255, 255));
        SDL_BlitSurface(rectangle, NULL, screen, &position); // Collage de la surface sur l'écran
        SDL_Flip(screen); // Mise à jour de l'écran
       // SDL_Delay( 100 );
        SDL_FillRect(rectangle, NULL, SDL_MapRGB(screen->format, 0, 0, 0));
        SDL_BlitSurface(rectangle, NULL, screen, &position); // Collage de la surface sur l'écran
     
     
        }
    	SDL_Delay( 3000 );
     
        return EXIT_SUCCESS;
    }

    donc j'ai réussi a crée une fenetre et afficher un point. je ne sais pas comment faire la suite, si vous pouvez m'aider svp ?


    Cordialement Nystag

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Qu'est-ce qui te bloque exactement pour la suite ?

    Attention, ton code est un mélange de C et de C++, il va falloir clarifier cela (i.e.: choisir). Selon le langage, les fonctions de manipulation de nombres pseudo-aléatoires sont déclarées respectivement dans stdlib.h ou dans random.

    Ce projet terminé, penche-toi assez vite sur la gestion des évènements (fenêtre, clavier, souris) avec SDL. Tous les tutoriels de base en font mention. Voici quelques objectifs à la portée d'un débutant, par ordre de difficulté croissante :

    • faire en sorte qu'une pression sur la touche d'échappement termine le programme en quittant la boucle principale ;
    • faire suivre le curseur de la souris à ton point ;
    • déplacer ton point en ligne droite à une vitesse donnée, puis le faire rebondir sur les bords de la fenêtre ;
    • déplacer ton points avec les flèches du clavier ;
    • etc..

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Tu as affiché un point c'est bien. Si tu veux l'afficher autre part et bien il te suffit de... modifier les coordonnées de son affichage.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre averti
    Homme Profil pro
    Ergonome
    Inscrit en
    Février 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Février 2017
    Messages : 13
    Par défaut
    merci pour vos réponse

    j'ai réussi à faire ce que je voulais de la manière suivante :

    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
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
     
    int main( int argc, char *argv[ ] )
    {
        SDL_Surface *screen;
        int lastrender = 0;
        if( SDL_Init( SDL_INIT_JOYSTICK | SDL_INIT_VIDEO ) == -1 )
        {
            printf( "Can't init SDL:  %s\n", SDL_GetError( ) );
            return EXIT_FAILURE;
        }
     
        atexit( SDL_Quit );
        screen = SDL_SetVideoMode( 640, 480, 16, SDL_HWSURFACE );
     
        if( !screen)
        {
            printf( "Can't set video mode: %s\n", SDL_GetError( ) );
            return EXIT_FAILURE;
        }
     
        SDL_Rect position;
        SDL_Surface *rectangle = NULL;
        rectangle = SDL_CreateRGBSurface(SDL_HWSURFACE, 10, 10, 16, 0, 0, 0, 0);
     
        position.x = screen->w/2;
        position.y = screen->h/2;
        bool jeu = false;
        SDL_Event event;
        while(!jeu)
        {
        SDL_FillRect(rectangle, NULL, SDL_MapRGB(screen->format, 255, 255, 255));
        SDL_BlitSurface(rectangle, NULL, screen, &position); // Collage de la surface sur l'écran
        SDL_Flip(screen); // Mise à jour de l'écran
       // SDL_Delay( 100 );
        SDL_FillRect(rectangle, NULL, SDL_MapRGB(screen->format, 0, 0, 0));
        SDL_BlitSurface(rectangle, NULL, screen, &position); // Collage de la surface sur l'écran
        position.x = rand()%screen->w;
        position.y = rand()%screen->h;
     
     
    	SDL_Delay( 2000 );
     
     
        }
     
        exit(0)
     
        return EXIT_SUCCESS;
    }
    mais mon programme ne veut pas se fermer malgré que j'ai ajouté un exit(0)

    pourriez vous m'aider svp

  5. #5
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Ce programme ne compile pas, il manque un point-virgule. Quoi qu'il en soit, tu n'as pas besoin d'appeler exit ici.

    Quelle est la condition de sortie de ta boucle principale ?

  6. #6
    Membre averti
    Homme Profil pro
    Ergonome
    Inscrit en
    Février 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Février 2017
    Messages : 13
    Par défaut
    comme condition de sortie j'en ai pas encore mis, mais j'aimerais que ça soit lorsque l'on press une certaine touche (ex : echap ) je sors de la boucle. es-ce possible ?

Discussions similaires

  1. pb relier des points avec la SDL en C
    Par rafale001 dans le forum SDL
    Réponses: 1
    Dernier message: 25/02/2007, 15h42
  2. Petite mise au point avec gluUnProject.
    Par fatpat94 dans le forum OpenGL
    Réponses: 1
    Dernier message: 27/07/2005, 15h40
  3. probléme avec la sdl et c++
    Par wikers dans le forum OpenGL
    Réponses: 1
    Dernier message: 10/11/2004, 19h02
  4. Problème avec lib SDL
    Par Info-Rital dans le forum Linux
    Réponses: 8
    Dernier message: 02/07/2004, 20h59
  5. chargement de texture avec la SDL
    Par Fry dans le forum OpenGL
    Réponses: 7
    Dernier message: 27/05/2004, 15h31

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