Une horloge dont on peut faire tourner les aiguilles

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 301 fois - Téléchargée 17 fois

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

Ajouter un commentaire

Commentaires

buzhug35
Messages postés
16
Date d'inscription
samedi 5 janvier 2008
Statut
Membre
Dernière intervention
3 septembre 2011
-
j'ai modifié le script (on peut voir les chiffres maintenant)

j'ai mis un fichier .swf d'utilisation très basique dans une page hml en ligne, à l'adresse suivante :
http://chlbihan.club.fr/briquepasbraque/potascript/horloge.html

le fichier .as est recopié dans la source et disponible là :
http://chlbihan.club.fr/briquepasbraque/potascript/UneHorloge.as

l'idée était de pouvoir retrouver le genre d'utilisation que j'en avais avant de voir toutes mes programmations flash et autres disparaître lors d'un plantage mémorable de l'ordi.
Un viel exemple d'utilisation est visible là :
http://chlbihan.club.fr/briquepasbraque/math/ce2/heures.html

En espérant que les précisions suffisent (j'ai passé 2 heures sans ADSL à essayer de modifier la source mais le forum crée un message d'errreur sur Safari)
Cordialement
pegase31
Messages postés
6161
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
6 -
Salut,
un petit fichier .as et un exemple compilé seraient les bienvenus car tout le monde n'a pas Flash sous la main tout le temps.

Peg'

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.