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
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.