Une horloge dont on peut faire tourner les aiguilles

Contenu du snippet

fichier de classe de l'horloge.
Les aiguilles tournent indépendamment par contre l'heure ne varie pas correctement au passage de la grande aiguille par le 12 (je ne sais pas faire).
.................................................................................................................................................
dans le premier exemple cité, ce n'est qu'une application basique des deux fonctionnalités de l'horloge :
  • récupérer une heure indiquée par les aiguilles que l'ont a faites tourner ;
  • positionner automatiquement les aiguilles à l'heure que l'on a saisie.

Source / Exemple :


///////////////////
/* UneHorloge.as */
///////////////////

dynamic class UneHorloge
{
private var conteneur_mc:MovieClip;
private var cible_mc:MovieClip;

private var profondeur_Conteneur:Number;
private static var profondeur_Fond:Number=0;
private static var profondeur_Graduations:Number=1;
private static var profondeur_Nombres:Number=2;
private static var profondeur_Grande_Aiguille:Number=15;
private static var profondeur_Petite_Aiguille:Number=16;

private var taille:Number;

private var couleur_trait:Number=0xFF6600;
private var couleur_fond:Number=0x00FF99;
private var couleur_grande_aiguille:Number=0x660000;
private var couleur_petite_aiguille:Number=0xFFCC00;

private var bouge_petite_aiguille:Boolean=false;
private var bouge_grande_aiguille:Boolean=false;

public var place:Array=new Array(0,0);

public var angle_petite_aiguille:Number;
public var angle_grande_aiguille:Number;
public var heure:Array=new Array(0,0);

public function UneHorloge(cible:MovieClip,profondeur:Number,pos:Array,tal:Number)
    {
    cible_mc=cible;
    profondeur_Conteneur=profondeur;
    taille=tal;
    dessine();
    setPos(pos);
    }
    
    
private function dessine()
    {
    conteneur_mc=cible_mc.createEmptyMovieClip("conteneur_mc"+profondeur_Conteneur,profondeur_Conteneur);
    dessine_fond();
    dessine_graduations();
    dessine_nombres();
    dessine_grande_aiguille();
    dessine_petite_aiguille();
    var instanceClasse:UneHorloge=this;
    conteneur_mc.petite_aiguille_mc.onPress=function()
        {
        if ((!instanceClasse.bouge_grande_aiguille)&&(!instanceClasse.bouge_petite_aiguille)) instanceClasse.bouge_petite_aiguille=true;
        else instanceClasse.bouge_petite_aiguille=false;
        trace("petite : "+instanceClasse.bouge_petite_aiguille);
        }
    conteneur_mc.petite_aiguille_mc.onMouseMove=function()
        {
        var angle_souris:Number=0;
        if (instanceClasse.bouge_petite_aiguille)
            {
            var angle_souris:Number=0;
            //trace ("souris : "+_xmouse+";"+_ymouse+" et centre : "+instanceClasse.place[0]+","+instanceClasse.place[1]);
            angle_souris=90-Math.atan2((-_ymouse+instanceClasse.place[1]),(_xmouse-instanceClasse.place[0]))*180/Math.PI;
            angle_souris=(360+angle_souris)%360;
            angle_souris=30*Math.round(angle_souris/30);
            //trace(angle_souris);
            this._rotation=angle_souris+instanceClasse.heure[1]*0.5;
            instanceClasse.heure[0]=angle_souris/30;
            }
        }
    conteneur_mc.grande_aiguille_mc.onPress=function()
        {
        if ((!instanceClasse.bouge_grande_aiguille)&&(!instanceClasse.bouge_petite_aiguille)) instanceClasse.bouge_grande_aiguille=true;
        else instanceClasse.bouge_grande_aiguille=false;
        trace("grande : "+instanceClasse.bouge_grande_aiguille);
        trace(this._rotation);
        }
    conteneur_mc.grande_aiguille_mc.onMouseMove=function()
        {
        var angle_souris:Number=0;
        var angle_precedent:Number=(this._rotation+360)%360;
        if (instanceClasse.bouge_grande_aiguille)
            {
            //trace ("souris : "+_xmouse+";"+_ymouse+" et centre : "+instanceClasse.place[0]+","+instanceClasse.place[1]);
            angle_souris=90-Math.atan2((-_ymouse+instanceClasse.place[1]),(_xmouse-instanceClasse.place[0]))*180/Math.PI;
            angle_souris=(360+angle_souris)%360;
            angle_souris=6*Math.round(angle_souris/6);
            //trace(angle_souris);
            this._rotation=angle_souris;
            instanceClasse.heure[1]=angle_souris/6;
            if (angle_souris==360) 
                {
                instanceClasse.heure[1]=0;
                instanceClasse.heure[0]+=1;
                }
instanceClasse.conteneur_mc.petite_aiguille_mc._rotation=30*instanceClasse.heure[0]+(instanceClasse.heure[1]/2);
            }
        }
    }
    
private function dessine_fond()
    {
    conteneur_mc.createEmptyMovieClip("fond_mc",profondeur_Fond);
    conteneur_mc.fond_mc.lineStyle(4,couleur_trait);        
    conteneur_mc.fond_mc.moveTo(0-taille,0);
    conteneur_mc.fond_mc.beginFill(couleur_fond,100);
    var pas_dessin:Number=100;
    var curseur_dessin:Number=1;
    while (curseur_dessin<pas_dessin+1)
        {
        conteneur_mc.fond_mc.lineTo(-taille*(1-curseur_dessin/pas_dessin),-taille*Math.sqrt(curseur_dessin/pas_dessin*(2-curseur_dessin/pas_dessin)));
        curseur_dessin++;
        }
    curseur_dessin=1;
    while (curseur_dessin<pas_dessin+1)
        {
        conteneur_mc.fond_mc.lineTo(taille*Math.sqrt(curseur_dessin/pas_dessin*(2-curseur_dessin/pas_dessin)),-taille*(1-curseur_dessin/pas_dessin));
        curseur_dessin++;
        }
    curseur_dessin=1;
    while (curseur_dessin<pas_dessin+1)
        {
        conteneur_mc.fond_mc.lineTo(taille*(1-curseur_dessin/pas_dessin),taille*Math.sqrt(curseur_dessin/pas_dessin*(2-curseur_dessin/pas_dessin)));
        curseur_dessin++;
        }
    curseur_dessin=1;
    while (curseur_dessin<pas_dessin+1)
        {
        conteneur_mc.fond_mc.lineTo(-taille*Math.sqrt(curseur_dessin/pas_dessin*(2-curseur_dessin/pas_dessin)),taille*(1-curseur_dessin/pas_dessin));
        curseur_dessin++;
        }
    conteneur_mc.fond_mc.endFill();
    }
    
private function dessine_graduations()
    {
     conteneur_mc.createEmptyMovieClip("graduations_mc",profondeur_Graduations);
     conteneur_mc.graduations_mc.lineStyle(1,couleur_trait);
     var curseur_dessin:Number=0;
     for (curseur_dessin=0;curseur_dessin<60;curseur_dessin++)
        {
        conteneur_mc.graduations_mc.moveTo(taille*Math.sin(curseur_dessin*Math.PI/30),taille*Math.cos(curseur_dessin*Math.PI/30));
        if (curseur_dessin%5==0) conteneur_mc.graduations_mc.lineTo(85*taille*Math.sin(curseur_dessin*Math.PI/30)/100,85*taille*Math.cos(curseur_dessin*Math.PI/30)/100);
        else conteneur_mc.graduations_mc.lineTo(93*taille*Math.sin(curseur_dessin*Math.PI/30)/100,93*taille*Math.cos(curseur_dessin*Math.PI/30)/100);
        }
    }
    
private function dessine_nombres()
    {
     conteneur_mc.createEmptyMovieClip("nombres_mc",profondeur_Nombres);
     var curseur_dessin:Number=0;
     for (curseur_dessin=0;curseur_dessin<12;curseur_dessin++)
        {
        conteneur_mc.nombres_mc.createTextField("nombre"+curseur_dessin+"_txt", 3+curseur_dessin,-5+80*taille*Math.sin(curseur_dessin*Math.PI/6)/100, -5-80*taille*Math.cos(curseur_dessin*Math.PI/6)/100, 30, 14);
        }
    conteneur_mc.nombres_mc.nombre0_txt.text=12;
    conteneur_mc.nombres_mc.nombre1_txt.text=1;
    conteneur_mc.nombres_mc.nombre2_txt.text=2;
    conteneur_mc.nombres_mc.nombre3_txt.text=3;
    conteneur_mc.nombres_mc.nombre4_txt.text=4;
    conteneur_mc.nombres_mc.nombre5_txt.text=5;
    conteneur_mc.nombres_mc.nombre6_txt.text=6;
    conteneur_mc.nombres_mc.nombre7_txt.text=7;
    conteneur_mc.nombres_mc.nombre8_txt.text=8;
    conteneur_mc.nombres_mc.nombre9_txt.text=9;
    conteneur_mc.nombres_mc.nombre10_txt.text=10;
    conteneur_mc.nombres_mc.nombre11_txt.text=11;
    }

private function dessine_grande_aiguille()
    {
    conteneur_mc.createEmptyMovieClip("grande_aiguille_mc",profondeur_Grande_Aiguille);
    conteneur_mc.grande_aiguille_mc.lineStyle(1,couleur_grande_aiguille);
    conteneur_mc.grande_aiguille_mc.moveTo(0,0);
    conteneur_mc.grande_aiguille_mc.beginFill(couleur_grande_aiguille,100);
    conteneur_mc.grande_aiguille_mc.lineTo(-Math.floor(12*taille/100),-Math.floor(68*taille/100));
    conteneur_mc.grande_aiguille_mc.lineTo(0,-8*taille/10);
    conteneur_mc.grande_aiguille_mc.lineTo(Math.floor(12*taille/100),-Math.floor(68*taille/100));
    conteneur_mc.grande_aiguille_mc.lineTo(0,0);
    conteneur_mc.grande_aiguille_mc.endFill();   
    angle_grande_aiguille=0;
    }
    
private function dessine_petite_aiguille()
    {
    conteneur_mc.createEmptyMovieClip("petite_aiguille_mc",profondeur_Petite_Aiguille);
    conteneur_mc.petite_aiguille_mc.lineStyle(1,couleur_petite_aiguille);
    conteneur_mc.petite_aiguille_mc.moveTo(0,0);
    conteneur_mc.petite_aiguille_mc.beginFill(couleur_petite_aiguille,100);
    conteneur_mc.petite_aiguille_mc.lineTo(-Math.floor(9*taille/100),-Math.floor(51*taille/100));
    conteneur_mc.petite_aiguille_mc.lineTo(0,-6*taille/10);
    conteneur_mc.petite_aiguille_mc.lineTo(Math.floor(9*taille/100),-Math.floor(51*taille/100));
    conteneur_mc.petite_aiguille_mc.lineTo(0,0);
    conteneur_mc.petite_aiguille_mc.endFill();
    angle_petite_aiguille=0;   
    }
    
public function setPos(pos:Array)
    {
    place=pos;
    conteneur_mc._x=place[0];
    conteneur_mc._y=place[1];
    trace("place : "+place[0]+";"+place[1]);
    }
    
public function setHeure(uneheure:Array)
    {
    heure=uneheure;
    angle_grande_aiguille=heure[1]*6;
    angle_petite_aiguille=heure[0]*30+heure[1]*0.5;
    conteneur_mc.petite_aiguille_mc._rotation=angle_petite_aiguille;
    conteneur_mc.grande_aiguille_mc._rotation=angle_grande_aiguille;
    }
    
public function getHeure():Array
    {
    return heure;
    }
    
}

Conclusion :


Si vous pouvez m'aider à améliorer ?

pour voir les effets ?
mise en ligne d'un exemple à l'adresse

http://chlbihan.club.fr/briquepasbraque/potascript/horloge.html

une utilisation en étant par exemple celle située à l'adresse ci-dessous (vieux fichiers dont j'ai malheureusement perdu toutes les sources lors d'un gros plantage d'ordi)

http://chlbihan.club.fr/briquepasbraque/math/ce2/heures.html

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.