Articles taggés avec 'draw () »

Peinture Flash CS3: véritable outil d'effacement du temps

En commençant par les codes fournis dans Créer un peinture dans Flash CS3 , et effectuer des modifications mineures, peut grandement améliorer l'instrument de "effacement". Ajout d'une figure n'est pas visible, vous pouvez l'utiliser comme un «plan» pour exécuter le draw() dans le mode de fusion "effacement". Comme le montre l'exemple ci-dessous, après avoir tiré quelque chose, maintenez la touche Ctrl enfoncée et l'effet de "supprimer" apparaît désormais en temps réel.

Flash Player Loading ...

Le code est comme suit: - Source :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
. MouseEvent ; flash.events importation. MouseEvent ;
. BitmapData ; import flash.display. BitmapData ;
. Bitmap ; importer flash.display. Bitmap ;
. GradientType ; import flash.display. GradientType ;
/ /
. Matrix ; . importation flash.geom matrice ;
/ /
Boolean = false ; md var: Boolean = false;
/ /
Sprite = new Sprite ( ) ; var event_spr: Sprite = new Sprite ();
event_spr ) ; addChild (event_spr);
/ /
Number = event_spr . stage . stageWidth ; var area_width: Nombre .. = event_spr stade stageWidth;
Number = event_spr . stage . stageHeight - 32 ; area_height var: Nombre .. = event_spr stade stageHeight - 32;
/ /
String = GradientType . LINEAR ; fillType var: Chaîne = GradientType LINÉAIRE;.
: Array = [ 0xFF0000 , 0x00FF00 , 0x0000ff ] ; couleurs var: tableau = [0xFF0000, 0x00FF00 0x0000FF];
: Array = [ 1 , 1 , 1 ] ; var alphas: tableau = [1, 1, 1];
: Array = [ 0 , 128 , 255 ] ; ratios var: tableau = [0, 128, 255];
String = SpreadMethod . PAD ; spreadMethod var: Chaîne = SpreadMethod PAD;.
: Matrix = new Matrix ( ) ; var matrice: Matrice = new Matrice ();
createGradientBox ( area_width , area_height , 1 , 0 , 0 ) ; . matrice createGradientBox (area_width, area_height, 1, 0, 0);
/ /
event_spr . graphics ) { avec (event_spr. graphiques) {
fillType , colors , alphas , ratios , matrix , spreadMethod ) ; beginGradientFill (fillType, couleurs, alphas, ratios, de matrice, SpreadMethod);
0 , 0 , area_width , area_height ) ; drawRect (0, 0, area_width, area_height);
; endFill ();
}
/ / Événements Paint
( MouseEvent . MOUSE_DOWN , _onMouseDown ) ; . event_spr addEventListener ( MouseEvent MOUSE_DOWN, _onMouseDown.);
( MouseEvent . MOUSE_MOVE , _onMouseMove ) ; . event_spr addEventListener ( MouseEvent MOUSE_MOVE, _onMouseMove.);
( MouseEvent . MOUSE_UP , _onMouseUp ) ; . event_spr addEventListener ( MouseEvent MOUSE_UP, _onMouseUp.);
( MouseEvent . MOUSE_OUT , _onMouseUp ) ; . event_spr addEventListener ( MouseEvent MOUSE_OUT, _onMouseUp.);
/ /
BitmapData = new BitmapData ( event_spr . width , event_spr . height , true , 0 ) ; var bmpd: BitmapData = new BitmapData (largeur event_spr., event_spr hauteur, c'est vrai, 0.);
Bitmap = new Bitmap ( bmpd ) ; var bmp: Bitmap = new Bitmap (bmpd);
bmp ) ; addChild (bmp);
/ /
Forme / / temporaire
Shape = new Shape ( ) ; draw_shape var: Forme = new Shape ();
draw_shape ) ; addChild (draw_shape);
/ /
/ / Forme, non représenté, utilisé pour la «annulation»
Shape = new Shape ( ) ; erase_shape var: Forme = new Shape ();

/ /
e : MouseEvent ) : void { fonction _onMouseDown (e: MouseEvent ): void {
) ; debug ("_onMouseDown");
. lineStyle ( 10 , 0xffffff , 1 ) ; .. draw_shape graphiques lineStyle (10, 0xffffff, 1);
. lineStyle ( 20 , 0xffffff , 1 ) ; .. erase_shape graphiques lineStyle (20, 0xffffff, 1);
. moveTo ( e . localX , e . localY ) ; .. draw_shape graphiques moveTo (et. localX, et localY.);
. moveTo ( e . localX , e . localY ) ; .. erase_shape graphiques moveTo (et. localX, et localY.);
md = true;
}
/ /
e : MouseEvent ) : void { _onMouseUp function (e: MouseEvent ): void {
md = false;
. draw ( draw_shape ) ; .. bmp bitmapData tirage (draw_shape);
. clear ( ) ; draw_shape graphiques clear ()..;
. clear ( ) ; erase_shape graphiques clear ()..;
}
/ /
e : MouseEvent ) : void { _onMouseMove function (e: MouseEvent ): void {
) ; debug ("_onMouseMove");
md && ! e . ctrlKey ) { if (md &&! et. ctrlKey) {
. lineTo ( e . localX , e . localY ) ; .. draw_shape graphiques lineTo (et. localX, et localY.);
( md && e . ctrlKey ) { } Else if (md && e. CtrlKey) {
. lineTo ( e . localX , e . localY ) ; .. erase_shape graphiques lineTo (et. localX, et localY.);
. draw ( erase_shape , null , null , "erase" ) ; bmp bitmapData dessiner (erase_shape, null, null, "effacement")..;
}
}
/ /
v : String ) : void { debug fonction (v: cordes ): void {
: Date = new Date ( ) ; var d: Date de = new Date de ();
d . getMinutes ( ) + ":" + d . getSeconds ( ) + ":" + d . getMilliseconds ( ) + ": " + v ) ; trace (d. getMinutes () + "" + d getSeconds () + "" +. d getMilliseconds () + "" + v.);
}

): Nous avons ajouté une nouvelle forme, erase_shape pas visible (il n'a pas été fait aucun addChild() ):

1
2
3
...
/ / Forme, non représenté, utilisé pour la «annulation»
Shape = new Shape ( ) ; erase_shape var: Forme = new Shape ();

Dans le code qui prend soin de dessin a été introduite pour la touche de contrôle et, si vous êtes pressé, concerne précisément la forme erase_shape et copié dans le bitmap:

1
2
3
....
. lineTo ( e . localX , e . localY ) ; .. erase_shape graphiques lineTo (et. localX, et localY.);
. draw ( erase_shape , null , null , "erase" ) ; bmp bitmapData dessiner (erase_shape, null, null, "effacement")..;

En savoir plus ...

Créer une peinture dans Flash CS3

Tel que discuté dans Flash Actionscript concours: outil d'effacement vous ne pouvez pas «effacer» une zone particulière d'un objet Sprite, MovieClip, ou une forme sur laquelle les lignes ont été établis à travers les graphiques pointeur ou des rectangles. Il est, en fait, la seule méthode clear() qui, cependant, n'a aucun effet sur ​​toute la surface de notre objet. La solution au problème réside dans la possibilité d'utiliser le bitmap et des objets BitmapData. Comme nous le verrons, nous pouvons directement accéder et de manipuler des bitmaps pour "effacer" coups avec un instrument "eraser" réel.

Présenter deux méthodes différentes pour atteindre la "porte". per esempio. Les premiers "dessiner" (supprimer) les données directement dans le BitmapData, en utilisant la méthode fillRect() - vous pouvez également utiliser setPixel() par exemple. La seconde méthode, celle que je préfère, utilise les méthodes de fusions (blendMode).

Tout d'abord nous allons voir quel genre d'organisation est nécessaire pour parvenir à un peintre peu simple dans Flash. Le diagramme ci-dessous s'applique aux deux propositions, la «porte»:

motif bitmap-

J'ai créé trois couches: la première, MovieClip ou Sprite, et fonctionne comme un gestionnaire d'événements de fond (MouseDown, MouseMove et MouseUp). Le second, Bitmap, sont nos principales couches, l'une qui sera effectivement établi graphiques seront appliquées, et sur lequel la "porte". , ecc…). La troisième couche et la dernière, la forme, répond à deux questions: la première est qu'il permet d'utiliser directement les fonctions prévues par le curseur graphique (comme lineStyle , drawRect() , etc ...). Il augmente également la performance au cours de la tableau de suivi, comme il est expliqué en détail ci-dessous.

En savoir plus ...


Arrêtez SOPA