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

Caml Discussion :

Problème d'Event avec Caml Light


Sujet :

Caml

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Points : 10
    Points
    10
    Par défaut Problème d'Event avec Caml Light
    Bonjour ! Voici ma fonction :
    Fonction faisant clignoter une petite balle rose ^^
    (Passionnant les premiers de graphique a la fac :p)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    let rec Clignote_Key (x,y) = 
    begin
    set_color white;
    fill_circle x y 10;
    delay(38);
    set_color rose;
    fill_circle x y 10;
    delay(38);
    let a= wait_next_event [Key_pressed;Poll] in
    	if a.keypressed 
    	then ()
    	else Clignote_Key(x,y)
    end;;
    Le soucis que j'ai est que lors du premier appel cela fonctionne parfaitement
    Mais lorsque j'essai de le faire une nouvelle fois (sans fermer caml) caml me renvoi comme réplique directement unit() ... je crois savoir que cela vien du fait qu'il prend toujours en compte mon key_pressed comme une touche enfoncé mais je ne sais pas comment y remédié.

    Merci de m'aider ^^

  2. #2
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour !

    Citation Envoyé par Soshius
    Le soucis que j'ai est que lors du premier appel cela fonctionne parfaitement
    Mais lorsque j'essai de le faire une nouvelle fois (sans fermer caml) caml me renvoi comme réplique directement unit() ... je crois savoir que cela vien du fait qu'il prend toujours en compte mon key_pressed comme une touche enfoncé mais je ne sais pas comment y remédié.
    Tout juste ! Il faut vider explictement la pile lorsqu'une touche a été appuyée (partie importante surlignée en vert) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    let rec clignote x y = 
      set_color white;
      fill_circle x y 10;
      delay 38;
      set_color black;
      fill_circle x y 10;
      delay 38;
      let a = wait_next_event [Key_pressed; Poll] in
      if a.keypressed then ignore (wait_next_event [Key_pressed])
      else clignote x y
    Sinon tu as quelques maladresses d'écriture que tu peux corriger dans ton code. Vraiment trois fois rien mais bon...

    Cordialement,
    Cacophrène

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup ! Pourrais-tu m'aiguiller sur les maladresses ?

    La façon dont j'ai écris mon code est celle que j'apprends en cours donc je suis ouvert a toutes modification. ^^

    Edit: Ah Caml ne reconnais pas ignore faut il charger une bibliotheque spéciale ? J'utilise Caml Light.

  4. #4
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Re !

    Bah pour les maladresses ce sont surtout des détails. Par exemple on ne trouve jamais if foo then () else bar qui est remplacé par if not foo then bar (puisque le else () est implicite en caml). Concernant les fonctions, sauf s'il y a une bonne raison de le faire, on préfère écrire let fonction x y plutôt que let fonction (x, y). La justification est à chercher du côté de la curryfication et des applications partielles. L'emploi de begin...end pour délimiter le corps d'une fonction n'est absolument pas nécessaire. Ce sont des choses sans grande importance, qui devraient venir avec la pratique. Ne t'embête pas trop avec ça, surtout au tout début.

    Concernant ignore, effectivement c'est de l'OCaml. Plusieurs solutions pour avoir un comportement similaire en Caml Light :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if a.keypressed then (wait_next_event [Key_pressed]; ()) else ...
    ou redéfinir la fonction :
    Cordialement,
    Cacophrène

  5. #5
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour,

    Si ton problème est résolu, pense à marquer le sujet comme [Résolu]... ça facilitera les recherches dans le forum.

    Merci d'avance.

    Cordialement,
    Cacophrène

Discussions similaires

  1. Problème avec caml-light
    Par kazuma dans le forum Caml
    Réponses: 4
    Dernier message: 27/05/2013, 01h08
  2. Images avec caml-light
    Par trodurcamllight dans le forum Caml
    Réponses: 3
    Dernier message: 11/01/2013, 14h36
  3. Réponses: 3
    Dernier message: 25/09/2012, 17h43
  4. pb pour forcer un typage avec caml-light
    Par Moi_Emilie dans le forum Caml
    Réponses: 24
    Dernier message: 19/04/2007, 09h40

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