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

Prolog Discussion :

Animation avec XPCE


Sujet :

Prolog

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 12
    Points : 11
    Points
    11
    Par défaut Animation avec XPCE
    Bonjour à tous,

    Je veux animer une image bitmap avec XPCE.
    Pour cela j'ai créé un prédicat avancer qui décale mon bitmap et j'ai créé un bouton qui appelle ce prédicat. Lorsque j'appuie sur le bouton successivement, mon bitmap se déplace bien.

    Alors pour m'éviter de cliquer sur le bouton et pour rendre le programme un peu plus intéressant, j'ai créé un prédicat test qui appelle successivement avancer. Lorsque je le lance, mon animation ne s'affiche pas, en fait il n'y a que l'état initial et l'état final qui apparaissent à l'écran. Je tiens à préciser que j'ai calé un sleep(1) dans avancer...

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Montre un bout de code qu'on puisse tester.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Voila le bout de 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
    fenetre:-
    	%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    	% Création de la fenetre principal %
    	%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    	new(Principal, dialog('Anim')),
    	send(Principal, size, size(800,600)),
     
    	%Création de l'image
    	new(Image, bitmap('%Mettre le chemin d'un bitmap')),
     
     
    	%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    	% Création des boutons                          %
    	%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    	%Bouton Demarrer
    	new(Demarrer, button(demarrer, message(@prolog, demarrer, Principal, 2, Image))),
    	send(Principal, display, Demarrer, point(800,670)),
     
    	%Bouton Arret
    	new(Arret, button(arret, message(@prolog, arret, Image))),
    	send(Principal, display, Arret, point(800,620)),
     
    	%Bouton Avancer
    	new(Avancer, button(avancer, message(@prolog, test,Principal, 2, Image))),
    	send(Principal, display, Avancer, point(700,620)),
     
    	%%%%%%%%%%%%%%%%%%%%%%%%%
    	%Ouverture de la fenetre%
    	%%%%%%%%%%%%%%%%%%%%%%%%%
    	send(Principal, open).
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%FIN MENU_PRINCIPAL%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
     
    demarrer(Host,Num, NomLect):-
    	send(Host, display, NomLect, point(5,(5+((Num-1)*120)))).
     
    arret(A):-
    	send(A, x, -150).
     
    avancer(I):-
    	get(I, x, Absisses),
    	X = Absisses + 64,
    	send(I, x, X),
    	sleep(1).
     
    test(Host, Num, I):-
    	demarrer(Host, Num, I),
    	sleep(2),
    	avancer(I),
    	avancer(I),
    	avancer(I),
    	avancer(I),
    	avancer(I),
    	avancer(I),
    	avancer(I),
    	avancer(I).

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Au lieu d'utiliser un sleep qui fait tout bloquer (ce qui fait que tu ne vois que le départ et l'arrivée), utilise un timer pour envoyer l'ordre d'avancer toute les 200 ms par exemple.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Merci bien, mais maintenant G une erreur,
    ERROR: Arguments are not sufficiently instantiated

    Je te laisse le code modifié
    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
     
    fenetre:-
    	%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    	% Création de la fenetre principal %
    	%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    	new(Principal, dialog('Anim')),
    	send(Principal, size, size(800,600)),
     
    	%Création de l'image
    	new(Image, bitmap('%chemin du bitmap')),
    	%Mettre le chemin d'un bitmap
     
    	%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    	% Création de tous les appendices de la fenetre %
    	%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    	%Bouton Demarrer
    	new(Demarrer, button(demarrer, message(@prolog, demarrer, Principal, 2, Image))),
    	send(Principal, display, Demarrer, point(800,670)),
     
    	%Bouton Arret
    	new(Arret, button(arret, message(@prolog, arret, Image))),
    	send(Principal, display, Arret, point(800,620)),
     
    	%Bouton Avancer
    	new(Avancer, button(avancer, message(@prolog, test,Principal, 2, Image))),
    	send(Principal, display, Avancer, point(700,620)),
     
    	%Bouton Quiter
    	new(Quiter, button(quiter,message(Principal, destroy))),
    	send(Principal, display, Quiter, point(700,670)),
     
    	%%%%%%%%%%%%%%%%%%%%%%%%%
    	%Ouverture de la fenetre%
    	%%%%%%%%%%%%%%%%%%%%%%%%%
    	send(Principal, open).
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%FIN MENU_PRINCIPAL%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    interval(Win, Num, I):-
    	send(Win, attribute, attribute(timer,new(T,timer(1,message(@prolog, test, Win, Num, I))))),
    	send(T,start).
     
     
    demarrer(Host,Num, NomLect):-
    	send(Host, display, NomLect, point(5,(5+((Num-1)*120)))).
     
    arret(A):-
    	send(A, x, -150).
     
    avancer(I):-
    	get(I, x, Absisses),
    	X = Absisses + 64,
    	send(I, x, X).
     
    test(Host, Num, I):-
    	demarrer(Host, Num, I),
    	send(Win, attribute, attribute(timer,new(T,timer(1,message(@prolog, avancer, I))))),
    	send(T,start).
    Je me suis inspiré de la demo kangourou de XPCE.

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Voilà ton code avec un timer
    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
    fenetre:-
    	%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    	% Création de la fenetre principal %
    	%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    	new(Principal, dialog('Anim')),
    	send(Principal, size, size(800,600)),
     
    	%Création de l'image
    	new(Image, bitmap(%Chemin d'acces au bmp)),
    	send(Principal, display,
    			    Image, point(25, 25)),	
     
    	%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    	% Timer d'affichage                             %
    	%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    	new(MyTimer, timer(0.1,message(@prolog, my_message, Image))),
     
     
    	%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    	% Création des boutons                          %
    	%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    	%Bouton Demarrer
    	%new(Demarrer, button(demarrer, message(@prolog, demarrer, Principal, 2, Image))),
    	new(Demarrer, button(demarrer, message(MyTimer, start))),
    	send(Principal, display, Demarrer, point(100,470)),
     
    	%Bouton Arret
    	% new(Arret, button(arret, message(@prolog, arret, Image))),
    	new(Arret, button(arret, message(MyTimer, stop))),
    	send(Principal, display, Arret, point(300,470)),
     
    	%Bouton Avancer
    	new(Avancer, button(avancer, message(@prolog, test,Principal, 2, Image))),
    	send(Principal, display, Avancer, point(500,470)),
     
     
    	%%%%%%%%%%%%%%%%%%%%%%%%%
    	%Ouverture de la fenetre%
    	%%%%%%%%%%%%%%%%%%%%%%%%%
    	send(Principal, open).
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%FIN MENU_PRINCIPAL%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    my_message(I) :-
    	get(I, x, Absisses),
    	X = Absisses + 64,
    	send(I, x, X).
     
    /*
    demarrer(Host,Num, NomLect):-
    	send(Host, display, NomLect, point(5,(5+((Num-1)*120)))).
     
    arret(A):-
    	send(A, x, -150).
    */
    avancer(I):-
    	get(I, x, Absisses),
    	X = Absisses + 64,
    	send(I, x, X),
    	sleep(1).
     
    test(Host, Num, I):-
    	demarrer(Host, Num, I),
    	sleep(2),
    	avancer(I),
    	avancer(I),
    	avancer(I),
    	avancer(I),
    	avancer(I),
    	avancer(I),
    	avancer(I),
    	avancer(I).
     
    :-fenetre.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup pour ton aide.
    Je comprend beaucoup mieux l'utilité du timer et du message que l'on doit lui donner en paramètre.

  8. #8
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Pense au clic si tout est OK
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

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

Discussions similaires

  1. Afficher un Gif animée avec VC6
    Par vanitom dans le forum MFC
    Réponses: 2
    Dernier message: 13/10/2005, 17h46
  2. [FLASH MX2004] Lancer une anim avec des paramètres ??
    Par gchanteux dans le forum Flash
    Réponses: 4
    Dernier message: 23/03/2005, 17h49
  3. particules animées avec point sprites ?
    Par ilimo dans le forum DirectX
    Réponses: 3
    Dernier message: 10/09/2004, 23h12
  4. Animations avec différents objet
    Par Mathieu.J dans le forum OpenGL
    Réponses: 6
    Dernier message: 09/06/2004, 14h18
  5. Réponses: 2
    Dernier message: 14/01/2004, 16h21

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