begin process at 2012 02 10 12:54:04
  Trouver un code source :
 
dans
 
Accueil > 

Tutoriels

 > 

ActionScripts

 > [FLASH] APPROCHE DE L'AS PAR LE DESSIN (AVEC L'API DE FLASH)

[FLASH] APPROCHE DE L'AS PAR LE DESSIN (AVEC L'API DE FLASH)


 Information sur le tutoriel

Note :
7,56 / 10 - par 9 personnes
7,56 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

 Description

Quelques bases de tracé dynamique...

Tutorial

Bonjour,

Ce tutoriel est  inspiré  du livre  “Actionscript en action“ de Joey Lott.
et d’un code de Blacknight91titi.

Il s’adresse à ceux qui (commen moi évidemment) ont télécharger une
bonne quarantaine de sources et n’ont toujours rien capter en AS.
C’est juste une piste.


Pour commencer ouvre un nouveau .fla, dans fenêtre choisis le panneau Action et le panneau Info.

Le panneau Info peut te servir entre autre à te situer sur la scène avec les coordonnées x et y .

Le trait.

Nous allons d’abord créer un nouveau MovieClip vide. (pour y insrire notre trait).
Inscrit ce code dans la boîte de dialogue (panneau Action :-)

this.createEmptyMovieClip("montrait",1);

//this ->est utilisé pour cibler le MovieClip.
//montrait -> comme on aurait pu l’appeler moncafé ou monhuître.
//1 -> définit son niveau.


Ensuite on vas définir les propriétés du trait.
Code :

montrait.lineStyle(3.0,0x000000,100);

//3.0 -> l’épaisseur de montrait.
//0x000000 -> sa couleur (ici noir).
//100 -> le pourcentage de son alpha.

Pour donner un point de départ au trait nous allons utilisé les coordonnées x et y .
(par défaut les coordonnés partent du coin en haut à gauche de la scène) :

montrait.moveTo(90,224);

//90 ->x
//224 -> y

Et on lui donne un point d’arrivée :

montrait.lineTo(275,224);

la courbe.

this.createEmptyMovieClip("macourbe",1);
//on crée le clip.

macourbe.lineStyle(3,0x000000,100);
//on définit les propriétés.

macourbe.moveTo(97,224);
//1er point (x,y)

macourbe.curveTo(186,180,275,224);
//point de croisée des tangentes, second point.(x,y,x,y).

le carré.

this.createEmptyMovieClip("moncarré", 1);
moncarré.lineStyle(3,0x000000,100);
moncarré.moveTo(97,229);

//(x,y) en bas à gauche.

moncarré.lineTo(97,98)
;
//(x,y) en haut à gauche.

moncarré.lineTo(280,98);
//(x,y) en haut à droite.

moncarré.lineTo(280,229);
//(x,y) en bas à droite.

moncarré.lineTo(97,229);
//on relie au 1er point.

Une forme avec droite et courbe.

this.createEmptyMovieClip("maforme",1);
maforme.lineStyle(3,0x000000,100);
maforme.moveTo(97,229);
maforme.lineTo(97,98);
maforme.curveTo(185,50,280,98);
maforme.lineTo(280,229);
maforme.curveTo(185,277,97,229);


La même forme avec un remplissage.

this.createEmptyMovieClip("maforme",1);
maforme.beginFill(0xD9D9DB,100);

//on commence le remplissage.
//0xD9D9DB,100 -> couleur (ici gris) et alpha.

maforme.lineStyle(3,0x000000,100);
maforme.moveTo(97,229);
maforme.lineTo(97,98);
maforme.curveTo(185,50,280,98);
maforme.lineTo(280,229);
maforme.curveTo(185,277,97,229);
maforme.endFill();

// on termine le remplissage


Le dégradé

(cette fois j'écris le code comme tu le trouveras dans un .fla)

Linéaire:

this.createEmptyMovieClip("mondégradé",1);
        //on crée un nouveau clip
mondégradé
.lineStyle(1.5,0x7C7C7C,100);
with (this.mondégradé){
        remplissage=
"linear";
        //remplissage de type linéaire
        couleurs=[0x0000FF,0x00FF00,0x0000FF];
        //couleurs (ici haut, millieu, bas)
        alphas=[100,100,100];
        ratios= [0,127,255];
        //s'exprime en % de 0 à 255 %
matrix={matrixType:
"box",x:25,y:0,w:100,h:100,r:Math.PI/2};
        //matrice : ici tu change les paramètres x,y du dégradé
        //hauteur,largeur et direction

beginGradientFill(remplissage,couleurs,alphas,ratios,matrix);
        moveTo(25,0);
        lineTo(125,0);
        lineTo(125,100);
        lineTo(25,100);
        lineTo(25,0);
endFill;
        //on ferme le remplissage
}


Radial:

this.createEmptyMovieClip("mondégradé",1);
mondégradé.lineStyle(1.5,0x7C7C7C,100);
with (this.mondégradé){
        remplissage="radial";
        //remplissage de type radial
        couleurs=[0xFFFFFF,0x000000];
        //couleurs (ici blanc au centre noir au bord)
        alphas=[100,100];
        ratios= [0,255];   
matrix={matrixType:"box",x:180,y:100,w:200,h:200,r:Math.PI/2};
beginGradientFill(remplissage,couleurs,alphas,ratios,matrix);
        moveTo(92,68);
        lineTo(470,68);
        lineTo(470,327);
        lineTo(92,327);
        lineTo(92,68);
endFill;
}


Le cercle.

(voilà je reprend ma façon d'écrire ... plus facile..)

Pour le cercle c’est un peu plus compliqué. Car si tu utilise quatre courbes pour ce faire ça va te donner un cercle pas rond.

this.createEmptyMovieClip("moncercle",1);
moncercle.lineStyle(3,0x000000,100);
moncercle.moveTo(106,160);
moncercle.curveTo(106,80,186,80);
moncercle.curveTo(266,80,266,160);
moncercle.curveTo(266,240,186,240);
moncercle.curveTo(106,240,106,160);


Car il s’agit là de courbes de Bézier quadratiques (3 points d’ancrage).
Nous utiliserons donc huit curveTo() afin de se rapprocher au mieux de quatre courbes de Bézier cubiques (4 points d’ancrage).

Voici une technique :

MovieClip.prototype.drawCircle=function(rayon,x,y) {
//on crée la méthode

var monangle=Math.PI/4;
//il s'agit de calculer l'angle des huit segments, 360°/8= 45°= ?/4radians

var ctrlDist=rayon/Math.cos(monangle/2);
//faut prendre une équerre, un compas...
//on calcule la distance entre les points

var angle=0;
//on intitialise l'angle

var rx,ry,ax,ay;
//on définit les variables locales

this.moveTo(x+rayon,y);
//premier point

for (var i=0;i<8;i++) {
//on répéte huit fois l'opération = huits segments

angle+=monangle;
//on incrémente l'angle de monangle pour créer le cercle

rx=x+Math.cos(angle-(monangle/2))*(ctrlDist);
ry=y+Math.sin(angle-(monangle/2))*(ctrlDist);

//points de contrôle

ax=x+Math.cos(angle)*rayon;
ay=y+Math.sin(angle)*rayon;

//points terminaux de la courbe

this.curveTo(rx,ry,ax,ay);
//on dessine le segment

    }
};


var moncercle=this.createEmptyMovieClip("moncercle",1);
//on crée le clip

moncercle.lineStyle(3,0x000000,100);
//on définit ses propriétés

moncercle.drawCircle(80,186,160);
//rayon,x,y

le ploygone régulier:

MovieClip.prototype.dPR=function(cotes,longueur,rotation,x,y){
//on invoque la méthode (dessine Polygone Régulier)

rotation=Math.PI*rotation/180;
//on convertit rotation de degrés en radians

var angle=(2*Math.PI)/cotes;
//2π/radians l'angle de ces segments = 2π / nb. de segments

var rayon=(longueur/2)/Math.sin(angle/2);
//longueur du rayon du cercle qui circonscrit le polygone

var px=(Math.cos(rotation)*rayon)+x;
var py=(Math.sin(rotation)*rayon)+y;

//trigonométrie: rayon est l'hypothénuse et rotation l'angle.

this.moveTo(px,py);
//se déplace au points de départ sans tracer de ligne

for (var i=1;i<=cotes;i++){
px=(Math.cos((angle*i)+rotation)*rayon)+x;
py=(Math.sin((angle*i)+rotation)*rayon)+y;
this.lineTo(px,py);

//on dessine chaque cotés. on calcule les coordonnées du sommet à l'aide
//des formules trigonométriques utilisées pour calculer px et py
    }
};

this.createEmptyMovieClip("monpolygone",1);
monpolygone.lineStyle(2,0x000000,100);
monpolygone.dPR(7,100,0,200,200);

Une forme complexe

Lorsque les coordonnées sont trop nombreuses (dans le cas d’une carte géographique par ex.) on
peut utiliser une technique pour charger les informations stockées un fichier externe.
On utilisera pour ça une boucle for() et un tableau a deux dimensions,
Voici une techique avec un fichier .txt, fichier que l’on créeras à l’aide du bloc-notes (TextEdit pour Mac).


Dans le bloc notes on mettras par ex :

point=166,201;151,200;134,189;120,175;111,156;108,133;114,120;140,106;168,95;199,94;212,101;229,113;243,118;
260,111;270,110;276,115,282,127;283,141;282,153;287,168;302,179;309,189;309,203;302,213;297,221;288,234;
282,246;276,257;271,271;261,283;252,298;249,313;242,322;232,321;224,313;215,298;206,286;201,269;202,240;203,245;
201,223;197,213;177,203;166,201

(c’est l’afrique… bon vite fait quoi !)

Et dans Flash :

ok = false;

//on coupe le onEnterFrame

Loader = new LoadVars();

//on crée un nouveau LoadVars()

Loader.load("file://Rafael/Desktop/Afrique/coordonnés.txt");
//on charge le fichier

Loader.onLoad = function(Success) {

//on définis la méthode onLoad

if (Success) {
//si c'est chargé

map = Loader.point.split(";");
//on sépare les ";" des coordonnées

for (j=0; j
map[j] = map[j].split(",");

//on sépare les ","

       }
_root.createEmptyMovieClip("clip", 1);

//on crée un clip

clip.lineStyle(2, 0x000000, 100);
//on lui donne des propriétés

clip.moveTo(map[0][0], map[0][1]);
//on donne le premier point en référence au tableau (map)

ok = true;
//on ouvre le onEnterFrame

   }
};
onEnterFrame = function () {

//on crée la fonction onEnterFrame

if (ok) {
//on exécute la condition if

if (i
i++;
clip.lineTo(map[i][0], map[i][1]);

//on dessine le tracé du premier au dernier point

} else {
//si autre condition

delete (onEnterFrame);
//on vide le clip
  
        }
    }
};



Voilà, je vous conseille vivement d’utiliser l’éditeur de dessin de Blacknight91titi que vous trouverez ici :
http://www.flashkod.com/code.aspx?ID=32515

Vous pouvez changer la vitesse ips soit dans le panneau propriétés soit en utilisant la fonction setInterval().

Si vous avez des questions n’hésitez pas si je peux j’y répondrais.
Et si y’a des erreurs ou mauvaises explications n’hésitez pas non plus.
A+.


(//)


 Historique

10 août 2005 02:43:01 :
petites corrections ...
10 août 2005 02:52:05 :
petites corrections ...
10 août 2005 02:54:06 :
..petites corrections
10 août 2005 04:22:16 :
...
10 août 2005 04:25:52 :
...
12 août 2005 20:14:46 :
ajouts dégradés..
13 août 2005 14:44:52 :
ajout du polygone régulier

Commentaires

Commentaire de on_drag_on le 10/08/2005 02:37:56

voilà, j'espère que ça aidera certains à mieux comprendre comment décortiquer les sources.

Commentaire de Blacknight91titi le 10/08/2005 15:14:31

Super !
S'il est possible de mettre de la couleur dans le code sa serai peut être un peu plsu clair.
Concernant mno editeur de dessin le format rendu en .txt ne sera de la meêm syntaxe et ne vosu sera pas conséquent pas très utile...(voir ma source)

Mais sinon je pense que c'est une bonne initiative pour que les débutants apprenent a dessiner en AS.

Il faudrai juste rendre un peu plus clair le code ci dessus en éloignant s'il le faut les ligne du bord et en mettant de la couleur (je ne sais pas si l'on peut)

Bravo !

9/10

Blacknight

Commentaire de on_drag_on le 10/08/2005 15:56:46

re
ouais pour ta source (qui est carrément un plug-in) j'ai pas encore utilisé ttes ses fonctions...
pour la couleur tu as raison, dès que j'ai un peu de temps je corrige.
pour ce qui est de la façon d'écrire le code dans la boîte de dialogue, ben comme y'a mille façons je propose  
à chacuns d'aller voir un peu comment dans différentes sources et de trouver la sienne en étant le plus propre et logique pour soi.

je vois une erreur que j'arrive pas à corriger:

//il s'agit de calculer l'angle des huit segments, 360°/8= 45°= ?/4radians
360°/8= 45°/Pi/4 radians ... je n'arrive pas à inscrire le signe "Pi".

Merci pour ton comment!
A+.

Commentaire de Blacknight91titi le 10/08/2005 17:04:55

Je supose que le symbole "Pi" n'est pas acepter.
Laisse comme c'est sa devrait aller.
A moin de recopeir le code betement les gens le remplasseront.

Blacknight

Commentaire de Prouprou_Sensei le 10/08/2005 20:27:24

Sympa, ton tuto est complet et bien commenté.
Je trouve qu'il manque juste la partie de remplissage en degradé : beginGradientFill().

Merci.

Commentaire de on_drag_on le 10/08/2005 22:42:42

Merci, venant de ta part c'est motivant! :-)
C'est que j'ai encore pas mal de truc sympa du genre faire un carré aux coins arrondis paramétrable...
C'est vrai que beginGardientFill() est assez nécessaire, j'aurais pu/dû le mettre. Mais bon y'en a deux
(radial et linéaire) et y'a encore un truc que j'ai pas capté. Dès que j'ai compris je les mets.
A+.

Commentaire de on_drag_on le 12/08/2005 20:21:06

Ben Voili. Le dégardé linéaire et radial. Pour en savoir + sur les dégradés:
http://www.supersatori.com/tuts/gradientMatrix/
A++. (j'ai mis de couleur mais je vais pas tout refaire ... trop long).
(//)

Commentaire de on_drag_on le 12/08/2005 21:31:41

Merci à alise pour son aide pour le dégradé.

Commentaire de on_drag_on le 13/08/2005 14:46:37

j'ajoute encore le polygone régulier qui somme toute s'avère bien utile...
a+
(//)

Commentaire de LocalStone le 13/08/2005 17:23:39

Si j'avais su que y avait un tutoriel, j'aurais pas posé la question sur le forum ... Bravo !

Commentaire de lever le 26/09/2005 22:16:27

absolument génial c'est exactement ce que je cherchais, simple, clair et accessible au novice que je suis. Merci
à toi pour ton travail et à bientôt.
Lever

Commentaire de on_drag_on le 27/09/2005 16:45:15

bah', merci m'ssieurs!
(//)

Commentaire de crimaf le 23/01/2006 15:59:13

Super cette source !
Merci ça permet vraiment de comprendre comment dessiner en action script!

Petite question :
Pour la dernière figure, j'ai des erreurs lors de l'execution...
Est-ce qu'il ne manque pas des choses par ici :
  [   for (j=0; j
      map[j] = map[j].split(",");
      //on sépare les ","               ]
ou par là :
  [   if (i
      i++;
      clip.lineTo(map[i][0], map[i][1]);
      //on dessine le tracé du premier au dernier point     ]

Je suis débutante en AS peut-être que qqchose m'a échappé...
Crimaf

Commentaire de on_drag_on le 23/01/2006 18:04:06

... ah ben si, désolé :-/ ... et personne a rien dit ?? je devais être bien fatigué....

for (j=0; j< map.length; j++) {
map[j] = map[j].split(",");
}

et

if (i< map.length-1) {
i++;
clip.lineTo(map[i][0], map[i][1]);
}

voili, corrigé.
a+.
(//)

Commentaire de crimaf le 24/01/2006 09:32:30

Désolée de revenir à la charge... mais ça ne marche toujours pas pour moi, même apres corrections...
Heu... à priori, "i" serait "undefined" ?
Est-ce que tu vois d'où peut venir le problème ?

Merci,
Crimaf

Commentaire de on_drag_on le 24/01/2006 12:31:38

En effet, plus rien ... ça fonctionnait très bien avec MX et MX2004 , mais là, avec Flash 8 ,plus rien.
J'ai pas le temps de voir pourquoi, je suis débordé, désolé.
Je suis de retour début février... si tu trouves une solution n'hésite pas à poster.
A bientôt.
(//)

Commentaire de karabok le 06/02/2006 11:43:47

Super tutorial!!
est ce que c est possible de relier des clips dragables entre eux et que la ligne suivent les clips histoire de ne pas avoir une ligne statique????
svp.......

Commentaire de Nono_b le 07/06/2006 08:48:43

Code très pratique et clair même si c'est vrai que les couleurs auraient été un plus !!

Le dernier code ne me donne rien mais je vais trouver pourquoi dès que j'aurais du temps !
Sinon je demanderais juste un truc c'est comment tu gères les niveaux quand t'utilise un genre de truc comme ça ?
Car je n'arrive pas à tracer deux trucs sur le même niveau et en changeant de niveau sur tes programmes ça le fait or dans mon code à moi ça le fait pas ??!

Commentaire de mobone le 23/08/2007 15:31:08

et comment tu fais pour construire une ellipse en AS; svp ?

Commentaire de noname444 le 02/12/2007 17:07:06

super tuto qui m'as bien aidé merci.Saurais-tu te servir de beginBitmapFill (pour remplir un dessin d'une image ???

Commentaire de recep_a le 12/12/2007 14:52:45

voici le bon code :

ok = false;
i=0;
Loader = new LoadVars();
Loader.load("coordonnées.txt");
Loader.onLoad = function(Success)
{
if (Success)
{
map = Loader.point.split(";");
for (j=0; j<map.length;j++)
{
map[j] = map[j].split(",");
}
_root.createEmptyMovieClip("clip", 1);
clip.lineStyle(2.0,0x000000,100);
clip.moveTo(map[0][0], map[0][1]);
ok = true;
};
};
onEnterFrame = function ()
{
if (ok)
{
if (i<map.length-1)
{
i++;
clip.lineTo(map[i][0], map[i][1]);
}
else
{
delete(onEnterFrame);
}
}
};

Commentaire de h1fra le 01/01/2008 19:20:06

gg, très bon tuto, c'est vrai que ca pas forcement me servir mais on voit des trucs intérresant

Commentaire de a_tom_ique le 14/04/2008 23:25:18

bonjour, super tuto.
est ce qu'il serait possible d'intégrer à ça une espèce de fractale.
Je voudrais faire des lettres, je les ai déjà dessine en AS, et j'aimerais intégrer à ça une fractale aléatoire.
je ne sais pas si je me fais bien comprendre.
Bon merci d'avance.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,078 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales