Moniteur de contrôle de battement de coeur

 

On se propose de montrer la surveillance du rythme cardiaque comme à l'hôpital.
Cet exemple utilise des sprites et des scripts.
Je suppose connu les fonctions de création sur lesquelles je n'insisterai pas.

⇒ animation ⇐

Remarques préliminaires :
- Lorqu'on envoie un train d'impulsions, le premier écho a pour signal théorique sint / t qui a pour valeur 1 lorsque t -> 0. C'est ce signal que l'on var eproduire. On utilisera un traceur pour simuler le balayage.
- Dans un script qui utilise onEnterFrame(), il n'est pas possible d'utiliser la méthode PlaySound, contrairement à onFrame().
On utilisera alors l'astuce suivante : création d'un sprite vide dans lequel j'incorpore un son.

Tout d'abord, téléchargez le son 

Importez le : onglet Content / Sounds / Import

1 : Création des Objets.

1 - Définissez les dimensions générales 400x400 (couleur du fond #000033).
Prenez un Frame Rate égal à 200.

2 - Créez maintenant un cercle de couleur verte : X = 0 Y = 0 W = 2 H = 2
Anchor point : Center

3 - Convertissez ce cercle en sprite ( nom : dot , Target coché )
Menu Modify / Convert / Convert to sprite.

4 - Créez ensuite une ligne horizontale de couleur verte : X = 0 Y = 200 W=160

Convertissez la en sprite.

5 - Créez une autre ligne horizontale de couleur verte : X = 240 Y = 400 W=160 ( line : 2 )
Convertissez la en sprite. (nom : right Target : coché )

6 - Créez maintenant une ligne verticale de couleur rouge (Anchor point : Bottom center )
X = 200 Y= 200 H = 100

Convertissez la en sprite.

7 - Créez ensuite un cercle de couleur rouge X = 0 Y = 200 W = 2 Y = 2
Mettez un gradient radial de couleurs (blanc+rouge+blanc)

Convertissez le en sprite.

8 - Créez un sprite vide : menu Insert / Sprite.
Nommez le son Target coché.

Scripts

Dans Outline, sélectionnez Scene_1. Entrez le script suivant :

onLoad()
{
   // diminue alpha des traits horizontaux
   right._alpha = 50;
   left._alpha = 50;
   // hauteur largeur scene
   H = int(_root._height);
   W = int(_root._width);
   a = 100; // facteur d'échelle
   n = 800; // nombre de points
}

function f ( xxx )
{
   if ( xxx == 0 ) return 1; // ( sin t / t) → 1 quand t → 0
   return ( Math.sin(xxx) / xxx );
}

onFrame (1,afterPlacedObjectEvents)
{
   // définit une plage de tracé adéquate
   xn = -40; xp = 40;
   increment = (xp-xn) / n;
    // tracé de la fonction ( sin t / t )
   for (i=1; i < n; i++)
   {
      duplicateSprite(dot, "dot"+i, i);
      ("dot"+i)._alpha = 40; // réduit le alpha
      ("dot"+i)._X = (W / 2) + xn + i*increment;
       yr = a*f(xn + i*increment);
      ("dot"+i)._Y = (H / 2) - yr;
   }
   dot._alpha = 0; // 0 pour celui de base
}

Dans Outline, sélectionnez le sprite son. Entrez le script suivant :

onFrame(1) { stop(); } // on ne joue pas au départ
onFrame (2) { playSound("beat.wav"); }

Dans Outline, sélectionnez le sprite spot. Entrez le script suivant :

onLoad()
{
   _X = 0; // position initiale
      _alpha = 100;
}
onEnterFrame(includingFirstFrame)
{
   _X += 2; // incrémente de 2 pixels en X
    // si dans la zone (sint /t) , on cache
   if ( (_X >= 160) && (_X < 240) )
       _alpha = 0;
   else _alpha = 100; // sinon on montre le spot
   // sors à droite ? alors revient au départ.
   if ( _X >= _root.W) _X = 0;
}

Dans Outline, sélectionnez le sprite beep. Entrez le script suivant :

onLoad()
{
   _X = 0; // position initiale
   _yscale = 2; // % echelle Y initiale
   delta = 0; // initialise une variable
}
onEnterFrame(includingFirstFrame)
{
   _X += 2; // incrémente de 2 pixels
    debut = 160; // c'est la fin de la ligne left
    fin = debut + 80; // début de la ligne right
    /* dans la zone du tracé de (sin t / t) on construit
    une verticale dont l'extrémité suit la courbe,
    ce qui donne une impression de balayage */
   if ( (_X >= debut) && (_X < fin) )
   {
      start = -40;
      _yscale = _root.a * _root.f( start + delta) ;
      if ( (start + delta) == 0) _root.son.gotoAndPlay(2);
      delta += 2; // incrémente de 2 pixels pour suivre _X
   }
   else // si on sort on remet les conditions initiales
   if ( _X >= _root.W)
   {
      _yscale = 2;
      _X = 0;
      delta = 0;
   }
}

Et voilà, c'est fini.

 


Si vous aimez le site

 

Select a language if you need :


Page chargée en 0.004 sec.

Dernière Modification : Mer 25 Janvier 2017 8:56
Copyright © 1999-2017 Jean-Paul Molina Tous droits réservés.

vers Google