Probleme de syntaxe

Résolu
mtlbss Messages postés 39 Date d'inscription dimanche 29 novembre 2009 Statut Membre Dernière intervention 8 mai 2011 - 21 mars 2011 à 23:45
mtlbss Messages postés 39 Date d'inscription dimanche 29 novembre 2009 Statut Membre Dernière intervention 8 mai 2011 - 29 mars 2011 à 18:17
Bonsoir, je viens de terminer une class Chrono, fonctionnant avec la Date, je suis plutôt satisfait du résultat, cependant j'ai mis beaucoup de temps à bidouiller le code, notamment pour créer ma fonction « resume », et je cherche a améliorer ma façons de coder, je suis certain que ma syntaxe est lourde, étant débutant en actionscript je cherche des conseil de personne plus expérimenter.
Voilà, j'espère ne pas trop vous ennuyer...^^

8 réponses

BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
22 mars 2011 à 07:32
Hello,

c'est sûr qu'il y a plusieurs façons de coder, et certaines seront effectivement moins lourdes que d'autres, beaucoup moins lourdes parfois . Après ce n'est pas évident d'avoir le code parfait (peut-être même impossible...), mais tout script est potentiellement "améliorable", cependant un code qui fonctionne et qui n'a pas / plus de bug est un code "opérationnel" (la chasse aux bugs, c'est le dada du programmeur). Mais lorsqu'on devient perfectionniste, parce qu'au fil de l'apprentissage on le devient, voir même maniaque , on cherche toujours à gagner un peu sur ceci ou cela : comment charger plus vite tel média, comment afficher plus vite cela, comment réduire au maximum le poids d'un fichier, comment réduire / optimiser un code tout en conservant les propriétés et l'efficacité de ce code.
Bref, c'est un travail de tous les jours, et c'est surtout l'expérience qui fera que tes codes seront à l'avenir rédigés de manière impeccable et presque de façon "instantanée". Mais ça c'est l'apanage de ceux qui ont des années d'expérience et qui ont, si je puis dire, grandit avec Flash (ce qui n'est pas mon cas ).

Quoi qu'il en soit, si tu veux une analyse et un retour sur ton travail, le mieux c'est de poster ton code .

A plus,

BBFUNK01

//C'est en forgeant qu'on devient forgeron... ;-) ;

musichrono
3
mtlbss Messages postés 39 Date d'inscription dimanche 29 novembre 2009 Statut Membre Dernière intervention 8 mai 2011
22 mars 2011 à 13:08
Bonjours, merci pour cette réponse, je post tout de suite mon script...^^


package script.test
{
import flash.display.Sprite;
import flash.display.Shape;
import flash.display.LineScaleMode;
import flash.display.SimpleButton;
import flash.display.CapsStyle;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.Event;
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.text.*;

public class Chrono extends MovieClip
{
public var zoneInterface:Sprite;
public var zoneInterface2:Sprite;
public var zoneInterface3:Sprite;

public var aiguHeur:Shape;
public var aiguMin:Shape;
public var aiguSec:Shape;

public var aiguDixSec:Shape;
public var aiguDixiem:Shape;
public var aiguSixiem:Shape;


public var date0:Date;
public var dateXx:Date;

public var moteur:Timer;

public var dejaEcoule:Number;
public var sEcoule:Number;

public var tabTem0:Array;
public var tabTemPause:Array;

public var rotaFact:Number;

public var btStartPause:SimpleButton;
public var btStopReset:SimpleButton;

public var normal:Shape;
public var survol:Shape;
public var clic:Shape;

public var normal1:Shape;
public var survol1:Shape;
public var clic1:Shape;
public var zoneTexte3:TextField;
public var format:TextFormat;
public function Chrono()
{
zoneTexte3=new TextField;
zoneTexte3.selectable = false;
zoneTexte3.autoSize= TextFieldAutoSize.LEFT;
zoneTexte3.x=20;
zoneTexte3.y=-25;

format = new TextFormat();
format.font = "Charlemagne Std";
format.color = 0xBD7A74;
format.size = 18;
format.underline = true;

addChild(zoneTexte3);

zoneTexte3.defaultTextFormat = format;

tabTemPause=new Array();
tabTem0=new Array();

dejaEcoule=0;
sEcoule=0;

moteur = new Timer(1);

zoneInterface=new Sprite();
zoneInterface.x=160;
zoneInterface.y=160;

addChild(zoneInterface);

zoneInterface2=new Sprite();
zoneInterface2.x=253;
zoneInterface2.y=15;
zoneInterface2.buttonMode=true;

addChild(zoneInterface2);

zoneInterface3=new Sprite();
zoneInterface3.x=285;
zoneInterface3.y=15;
zoneInterface3.buttonMode=true;

addChild(zoneInterface3);

btStartPause= new SimpleButton();

normal= new Shape();
survol= new Shape();
clic= new Shape();

normal.graphics.beginFill(0x3C3C3C);
normal.graphics.drawRect(0, 0, 20, 20);

survol.graphics.beginFill(0x666666);
survol.graphics.drawRect(0, 0, 20, 20);

clic.graphics.beginFill(0xCCCCCC);
clic.graphics.drawRect(0, 0, 20, 20);

btStartPause.upState = normal;
btStartPause.overState = survol;
btStartPause.downState = clic;
btStartPause.hitTestState = normal;

zoneInterface2.addChild(btStartPause);

btStopReset = new SimpleButton();

normal1 = new Shape();
survol1 = new Shape();
clic1 = new Shape();

normal1.graphics.beginFill(0x3C3C3C);
normal1.graphics.drawRect(0, 0, 20, 20);

survol1.graphics.beginFill(0x666666);
survol1.graphics.drawRect(0, 0, 20, 20);

clic1.graphics.beginFill(0xCCCCCC);
clic1.graphics.drawRect(0, 0, 20, 20);

btStopReset.upState = normal1;
btStopReset.overState = survol1;
btStopReset.downState = clic1;
btStopReset.hitTestState = normal1;

zoneInterface3.addChild(btStopReset);

aiguHeur= new Shape();

aiguHeur.graphics.lineStyle(4, 0x996633, 1, false, LineScaleMode.NONE, CapsStyle.ROUND);
aiguHeur.graphics.moveTo(0, -70);
aiguHeur.graphics.lineTo(0, 0);

zoneInterface.addChild(aiguHeur);

aiguMin= new Shape();

aiguMin.graphics.lineStyle(2, 0x3299FF, 1, false, LineScaleMode.NONE, CapsStyle.ROUND);
aiguMin.graphics.moveTo(0, -90);
aiguMin.graphics.lineTo(0, 0);

zoneInterface.addChild(aiguMin);

aiguSec= new Shape();

aiguSec.graphics.lineStyle(1, 0x33CC33, 1, false, LineScaleMode.NONE, CapsStyle.ROUND);
aiguSec.graphics.moveTo(0, -100);
aiguSec.graphics.lineTo(0, 0);

zoneInterface.addChild(aiguSec);

aiguDixSec= new Shape();

aiguDixSec.graphics.lineStyle(1.1, 0xFF9951, 0.5, false, LineScaleMode.NONE, CapsStyle.ROUND);
aiguDixSec.graphics.moveTo(0, -60);
aiguDixSec.graphics.lineTo(0, 0);

zoneInterface.addChild(aiguDixSec);

aiguDixiem= new Shape();

aiguDixiem.graphics.lineStyle(0.2, 0xFF9900, 0.5, false, LineScaleMode.NONE, CapsStyle.ROUND);
aiguDixiem.graphics.moveTo(0, -50);
aiguDixiem.graphics.lineTo(0, 0);

zoneInterface.addChild(aiguDixiem);

aiguSixiem= new Shape();

aiguSixiem.graphics.lineStyle(0.1, 0xFF9965, 0.5, false, LineScaleMode.NONE, CapsStyle.ROUND);
aiguSixiem.graphics.moveTo(0, -30);
aiguSixiem.graphics.lineTo(0, 0);

zoneInterface.addChild(aiguSixiem);

btStartPause.addEventListener(MouseEvent.MOUSE_DOWN,clicStart);

function tourner(evt:TimerEvent):void
{
zoneTexte3.text="chrono: "+Math.round(rotaFact/82000000)+" : "+Math.round(rotaFact/120000)+" : "+(Math.abs(rotaFact/1000));
dateXx=new Date();

sEcoule=(dateXx.getTime()-tabTem0[0]);
rotaFact=sEcoule+dejaEcoule;

trace(Math.round((sEcoule+dejaEcoule)/1000));

aiguHeur.rotation = Math.round(rotaFact*0.000006);
aiguMin.rotation = Math.round(rotaFact*0.0001);
aiguDixSec.rotation = Math.round(rotaFact*0.0006);
aiguSec.rotation = Math.round(rotaFact*0.006);
aiguDixiem.rotation =Math.round(rotaFact*0.036);
aiguSixiem.rotation = Math.round(rotaFact*0.06);
}

function clicStart(evt:MouseEvent)
{
btStartPause.removeEventListener(MouseEvent.MOUSE_DOWN,clicStart);
btStartPause.addEventListener(MouseEvent.MOUSE_DOWN,clicPause);

btStopReset.addEventListener(MouseEvent.MOUSE_DOWN,clicStop);

moteur.addEventListener(TimerEvent.TIMER,tourner);
moteur.start();

date0=new Date();
tabTem0.push(date0.getTime());

trace("start");
}

function clicPause(evt:MouseEvent)
{
btStartPause.removeEventListener(MouseEvent.MOUSE_DOWN,clicPause);
btStartPause.addEventListener(MouseEvent.MOUSE_DOWN,clicResume);

moteur.reset();

tabTemPause.shift();

date0=new Date();
tabTemPause.push(date0.getTime());

dejaEcoule=(tabTemPause[0]-tabTem0[0]+dejaEcoule);

trace("pause=="+Math.round(dejaEcoule/1000));
}

function clicResume(evt:MouseEvent)
{
btStartPause.removeEventListener(MouseEvent.MOUSE_DOWN,clicResume);
btStartPause.addEventListener(MouseEvent.MOUSE_DOWN,clicPause);

moteur.addEventListener(TimerEvent.TIMER,tourner);
moteur.start();

tabTem0.shift();

date0=new Date();

tabTem0=new Array();

tabTem0.push(date0.getTime());

trace("resume");
}

function clicStop(evt:MouseEvent)
{
btStopReset.removeEventListener(MouseEvent.MOUSE_DOWN,clicStop);
btStopReset.addEventListener(MouseEvent.MOUSE_DOWN,clicReset);

btStartPause.addEventListener(MouseEvent.MOUSE_DOWN,clicStart);
btStartPause.removeEventListener(MouseEvent.MOUSE_DOWN,clicResume);
btStartPause.removeEventListener(MouseEvent.MOUSE_DOWN,clicPause);

moteur.reset();

tabTem0=new Array(0);
tabTemPause=new Array(0);

dejaEcoule=0;
sEcoule=0;

trace("stop");
}

function clicReset(evt:MouseEvent)
{
btStopReset.removeEventListener(MouseEvent.MOUSE_DOWN,clicReset);
aiguHeur.rotation = 0;
aiguMin.rotation = 0;
aiguDixSec.rotation = 0;
aiguSec.rotation = 0;
aiguDixiem.rotation =0;
aiguSixiem.rotation = 0;
}
}
}
}
3
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
29 mars 2011 à 01:50
Bonjour,

voila quelques éléments d'amélioration, je n'ai pas fait les débugs et il reste encore des petites possibilités:


package script.test{ 
import flash.display.Sprite;
import flash.display.Shape;
import flash.display.LineScaleMode;
import flash.display.SimpleButton;
import flash.display.CapsStyle;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.Event;
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.text.*

public class Chrono extends MovieClip{ 
private var zoneInterface:Sprite; 
private var aiguHeur:Shape=new Shape(); 
private var aiguMin:Shape=new Shape(); 
private var aiguSec:Shape=new Shape(); 
private var aiguDixSec:Shape=new Shape(); 
private var aiguDixiem:Shape=new Shape();
private var aiguSixiem:Shape=new Shape();
private var btStartPause:SimpleButton; 
private var btStopReset:SimpleButton;
private var zoneTexte3:TextField; 

private var date0:Date; 
private var dateXx:Date; 
private var moteur:Timer; 
private var dejaEcoule:Number; 
private var sEcoule:Number; 
private var tabTem0:Array; 
private var tabTemPause:Array; 
private var rotaFact:Number; 



public function Chrono(){
var format:TextFormat=new TextFormat(); 
format.font="Charlemagne Std"; 
format.color=0xBD7A74; 
format.size=18; 
format.underline=true;

zoneTexte3=new TextField();//manque les parenthèses
zoneTexte3.selectable=false;
zoneTexte3.antiAliasType="advanced";////////////////////////////AJOUT
zoneTexte3.autoSize=TextFieldAutoSize.LEFT; 
zoneTexte3.x=20; 
zoneTexte3.y=-25;
zoneTexte3.defaultTextFormat=format; 

zoneInterface=new Sprite(); 
zoneInterface.x=160; 
zoneInterface.y=160;
var zoneInterface2:Sprite=new Sprite(); 
zoneInterface2.x=253; 
var zoneInterface3:Sprite=new Sprite(); 
zoneInterface3.x=285; 
zoneInterface2.y=zoneInterface3.y=15;//groupage possible
zoneInterface2.buttonMode=zoneInterface3.buttonMode=true;//groupage possible

//sert a rien de generaliser ces variables a la classe
var normal:Shape=new Shape();
normal.graphics.beginFill(0x3C3C3C); 
normal.graphics.drawRect(0,0,20,20);
var survol:Shape=new Shape();
survol.graphics.beginFill(0x666666); 
survol.graphics.drawRect(0,0,20,20);
var clic:Shape=new Shape();
clic.graphics.beginFill(0xCCCCCC); 
clic.graphics.drawRect(0,0,20,20);

btStartPause=new SimpleButton();
btStartPause.upState=normal; 
btStartPause.overState=survol; 
btStartPause.downState=clic; 
btStartPause.hitTestState=normal;
btStartPause.addEventListener(MouseEvent.MOUSE_DOWN,clicStart);//place le au meme niveau sauf si tu compte faire une gestion plus pointu des activation des ecouteurs

//pq faire des doublons de shapes si ce sont les memes???????
btStopReset=new SimpleButton();
btStopReset.upState=normal; 
btStopReset.overState=survol; 
btStopReset.downState=clic; 
btStopReset.hitTestState=normal;

dessiner(aiguHeur,4,0x996633,1,-70);
dessiner(aiguMin,2,0x3299FF,1,-90);
dessiner(aiguSec,1,0x33CC33,1,-100);
dessiner(aiguDixSec,1.1,0xFF9951,0.5,-60);
dessiner(aiguDixiem,0.2,0xFF9900,0.5,-50);
dessiner(aiguSixiem,0.1,0xFF9965,0.5,-30);

//un groupage des addchilds (dans la limite du possible) permet de bien vérifier la hierachie d'affichage
addChild(zoneTexte3);
addChild(zoneInterface);
zoneInterface2.addChild(btStartPause);
addChild(zoneInterface2);
zoneInterface3.addChild(btStopReset);
addChild(zoneInterface3);

// sans doute il sera preferable de mettre toute les valeurs d'initialisation d'en une fonction séparée, comme cela tu peux initier et reseter avec  la meme méthode
tabTemPause=new Array(); 
tabTem0=new Array();
dejaEcoule=sEcoule=0;//groupage
moteur=new Timer(1);
}

//alors la surtout ne pas imbriquer les fonctions (je ne fais pas de test de debug, c'est a toi de le faire)
private function dessiner(a0:Shape,a1:Number,a2,a3:Number,a4:Number):void{
a0.graphics.lineStyle(a1,a2,a3,false,LineScaleMode.NONE,CapsStyle.ROUND); 
a0.graphics.moveTo(0,a4); 
a0.graphics.lineTo(0,0);
zoneInterface.addChild(a0);
}

private function tourner(evt:TimerEvent):void{ 
dateXx=new Date();//? pas le courage de tout vérifier

sEcoule=(dateXx.getTime()-tabTem0[0]); 
rotaFact=sEcoule+dejaEcoule;
zoneTexte3.text="chrono: "+Math.round(rotaFact/82000000)+" : "+Math.round(rotaFact/120000)+" : "+(Math.abs(rotaFact/1000));// a poser apres

aiguHeur.rotation=Math.round(rotaFact*0.000006); 
aiguMin.rotation=Math.round(rotaFact*0.0001); 
aiguDixSec.rotation=Math.round(rotaFact*0.0006); 
aiguSec.rotation=Math.round(rotaFact*0.006); 
aiguDixiem.rotation=Math.round(rotaFact*0.036); 
aiguSixiem.rotation=Math.round(rotaFact*0.06); 
} 

private function clicStart(evt:MouseEvent){ 
btStartPause.removeEventListener(MouseEvent.MOUSE_DOWN,clicStart); 
btStartPause.addEventListener(MouseEvent.MOUSE_DOWN,clicPause); 
btStopReset.addEventListener(MouseEvent.MOUSE_DOWN,clicStop); 
moteur.addEventListener(TimerEvent.TIMER,tourner); 
moteur.start(); 
date0=new Date(); 
tabTem0.push(date0.getTime()); 
} 

private function clicPause(evt:MouseEvent){ 
btStartPause.removeEventListener(MouseEvent.MOUSE_DOWN,clicPause); 
 
moteur.reset(); 
tabTemPause.shift(); 
date0=new Date(); 
tabTemPause.push(date0.getTime()); 
dejaEcoule=(tabTemPause[0]-tabTem0[0]+dejaEcoule);

btStartPause.addEventListener(MouseEvent.MOUSE_DOWN,clicResume);
} 

private function clicResume(evt:MouseEvent){ 
btStartPause.removeEventListener(MouseEvent.MOUSE_DOWN,clicResume); 

tabTem0.shift(); 
date0=new Date(); 
tabTem0=new Array(); 
tabTem0.push(date0.getTime());

btStartPause.addEventListener(MouseEvent.MOUSE_DOWN,clicPause); 
moteur.addEventListener(TimerEvent.TIMER,tourner); 
moteur.start();
} 

private function clicStop(evt:MouseEvent){
//enleve en premier
btStopReset.removeEventListener(MouseEvent.MOUSE_DOWN,clicStop);
btStartPause.removeEventListener(MouseEvent.MOUSE_DOWN,clicResume); 
btStartPause.removeEventListener(MouseEvent.MOUSE_DOWN,clicPause);

moteur.reset(); 
tabTem0=new Array(0); 
tabTemPause=new Array(0); 
dejaEcoule=sEcoule=0;

//puis ajoute
btStopReset.addEventListener(MouseEvent.MOUSE_DOWN,clicReset); 
btStartPause.addEventListener(MouseEvent.MOUSE_DOWN,clicStart); 
} 

private function clicReset(evt:MouseEvent){ 
btStopReset.removeEventListener(MouseEvent.MOUSE_DOWN,clicReset); 
aiguHeur.rotation=aiguMin.rotation=aiguDixSec.rotation=aiguSec.rotation=aiguDixiem.rotation=aiguSixiem.rotation=0; 
} 
} 
}
3
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
29 mars 2011 à 01:55
J'ai oublié:

supprime:
>import flash.display.MovieClip;

remplace:
>public class Chrono extends MovieClip{
par
>public class Chrono extends Sprite{
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
29 mars 2011 à 01:58
pas possible d'éditer

supprime:
>import flash.events.Event;

remplace:
>import flash.text.*
par
>import flash.text.TextField;
>import flash.text.TextFieldAutoSize;
3
mtlbss Messages postés 39 Date d'inscription dimanche 29 novembre 2009 Statut Membre Dernière intervention 8 mai 2011
29 mars 2011 à 09:59
bonjours, tout d'abord merci beaucoup pour la réponse, j'ai regardé vite fait, mais je prendrais plus de temps dans la journée, en revanche, en supprimant: >import flash.text.*<, je doit aussi ajouter :>import flash.text.TextFormat;<, pour la gestion des bouton, il y a aussi un petit problème, mais je devrais trouver se qui déconne, en tout cas c'est très sympa, car je vais pouvoir améliorer ma façons de coder, encore merci^^
3
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
29 mars 2011 à 11:20
pense à rajouter (":void" a tes declarations de function si elle ne renvoie pas de valeur
3
mtlbss Messages postés 39 Date d'inscription dimanche 29 novembre 2009 Statut Membre Dernière intervention 8 mai 2011
29 mars 2011 à 18:17
bon, je viens de rajouter les ":void", cependant, je ne sais pas du tout a quoi cela sert, pour mon problème de bouton, c'est assez étrange, car je ne voie pas trop les causes, le problème c'est que ne s'affiche qu'un bouton a la fois....



(j'ai corrigé l'affichage numérique qui ne fonctionnais pas bien.)
3
Rejoignez-nous