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 :

Clignotement d'une image [turbo c++]


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de EpiTouille
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 372
    Par défaut Clignotement d'une image [turbo c++]
    Bonjour,
    je fais le programme de la balle qui rebondit sur les 4 coin de l'écran.
    Pour cela, j'utilise la bibliothèque graphique <graphics.h> qui permet de manipuler le mode 13h (VGA).

    Voici mon code :
    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
     
    #include <graphics.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <stdio.h>
     
    void Initialisation(int *aDriver, int *aMode)
    {
      aDriver = DETECT; //Detection auto
      initgraph(aDriver, aMode, "c:\\tc\\bgi");
      setfillstyle(1,RED); //motif de remplissage
    }
     
    int main(void)
    {
      int x = 0, y = 0;  //Coordonées
      int dx = 1, dy = 1; //Direction
      int vitesse = 4;
     
      int Driver,Mode;
      Initialisation(&Driver,&Mode);
     
      //Dessin du cercle
      circle(50,50,50);
      floodfill(50,50,WHITE); //Coloriage du rond
     
      //Allocation dynamique
      unsigned Taille;
      void *Image;
      Taille = imagesize(0,0,100,100);
      Image = malloc(Taille);
     
      //Récupération de l'image;
      getimage(0,0,100,100,image);
     
      //On efface tout
      cleardevice();
     
      //boucle principale
      char touche;
     
      while (touche != 27) //Tant que !esc
      {
        putimage(x,y,image, XOR_PUT);  //Affichage
        delay(50); 
        putimage(x,y,image, XOR_PUT); //Erase l'image
     
        x += dx * vitesse; //Déplacement des coordonnée
        y += dy * vitesse;
     
        //Gestion des collisions
        if ((x < 1) || ((x+100) > getmaxx()))
        {
          dx = -dx;
        }
     
         if ((y < 1) || ((y+100) > getmaxy()))
        {
          dy = -dy;
        }
     
        //Lecture Buffer
        while (kbhit())
        {
          touche = getch();
        }
      }
     
      closegraph();
      return 0;
    }
    Pour l'instant j'ai essayé la procedure Waitretrace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void wait_for_retrace(void)
    {
      /* wait until done with vertical retrace */
      while  ((inp(INPUT_STATUS) & VRETRACE));
      /* wait until done refreshing */
      while (!(inp(INPUT_STATUS) & VRETRACE));
    }
    Mais, le clignotement persiste.

    Merci de vos réponses
    Titeeee

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 485
    Par défaut
    Ouch ! À moins d'utiliser directement le D.O.S., je ne suis pas sûr que tu puisses lire directement la VBL à partir des ports hardware, même en émulation.

    De plus, comme tes boucles while sont vides, il y a des chances que ton compilateur les élimine si les options d'optimisation sont trop poussées.

  3. #3
    Membre émérite
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par défaut
    Bonjour,

    Peut-être en jouant sur le 3ième paramètre de putimage ? putimage(x,y,image, XOR_PUT) ;

    Attention, dans ton programme tu ne libères pas la mémoire allouée pour ton image.

  4. #4
    Membre éclairé
    Avatar de EpiTouille
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 372
    Par défaut
    En jouant sur XOR_PUT ?
    C'est à dire ?

    Merci de prendre le temps de me répondre

  5. #5
    Membre émérite
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par défaut
    Bonjour,

    Citation Envoyé par titeeee Voir le message
    En jouant sur XOR_PUT ?
    C'est à dire ?
    La fonction permet de préciser le mode d'affichage de l'image (à vérifier dans <graphics.h>) :
    • NORMAL_PUT

    • COPY_PUT

    • XOR_PUT

    • OR_PUT

    • AND_PUT

    • NOT_PUT

    Il faut peut-être afficher l'image avec une option (par exemple NORMAL) et l'effacer avec une autre (exemple XOR). Il faut faire des essais car ma dernière utilisation de Turbo C remonte un peu après la disparition des dinosaures

  6. #6
    Membre éclairé
    Avatar de EpiTouille
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 372
    Par défaut
    Dans l'aide, il dise que XOR_PUT est la méthode pour faire bouger une image à l'écran et peut- être utilisé pour des jeux

Discussions similaires

  1. Faire clignoter une image avec la SDL?
    Par francoisd42 dans le forum SDL
    Réponses: 2
    Dernier message: 29/04/2009, 16h31
  2. Clignotement gênant d'une image
    Par fansept dans le forum Composants VCL
    Réponses: 4
    Dernier message: 14/04/2008, 17h58
  3. Réponses: 2
    Dernier message: 15/11/2007, 12h15
  4. [VB6] Faire Clignoter une IMAGE
    Par Lucas42 dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 04/05/2006, 17h54
  5. [VB6] COmment Faire Clignoter une image ?
    Par Lucas42 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 25/04/2006, 11h29

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