Articles taggés avec 'fillRect ()'

Peinture Flash CS3: véritable outil d'effacer le temps

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

Chargement Flash ...

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 ; import flash.display. bitmaps ;
. GradientType ; . import flash.display GradientType ;
/ /
. Matrix ; les importations flash.geom. Matrice ;
/ /
Boolean = false ; MD var: booléen = 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 stages stageWidth;..
Number = event_spr . stage . stageHeight - 32 ; area_height var: Nombre .. = event_spr stages stageHeight - 32;
/ /
String = GradientType . LINEAR ; fillType var: Chaîne = GradientType . linéaires;
: 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 ; var spreadMethod: Chaîne = SpreadMethod . PAD,
: Matrix = new Matrix ( ) ; var matrice: Matrice = new Matrice ();
createGradientBox ( area_width , area_height , 1 , 0 , 0 ) ; . createGradientBox matrice (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, matrice, spreadMethod);
0 , 0 , area_width , area_height ) ; drawRect (0, 0, area_width, area_height);
; endFill ();
}
/ Événement / Peinture
( 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 la 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: Shape = new Shape ();
draw_shape ) ; addChild (draw_shape);
/ /
/ / Shape n'est pas visible, utilisé pour la «annulation»
Shape = new Shape ( ) ; erase_shape var: Shape = 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 clairs ().;
. clear ( ) ; . erase_shape graphiques clairs ().;
}
/ /
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 & & et. CtrlKey) {
. lineTo ( e . localX , e . localY ) ; .. erase_shape graphiques lineTo (et. localX et localY.);
. draw ( erase_shape , null , null , "erase" ) ; bmp bitmapData tirage (erase_shape, null, null, "effacer")..;
}
}
/ /
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 () + "" + getMilliseconds d. () + "" + st);
}

): Nous avons ajouté une nouvelle forme, erase_shape pas visible (il a été procédé à aucune addChild() ):

1
2
3
...
/ / Shape n'est pas visible, utilisé pour la «annulation»
Shape = new Shape ( ) ; erase_shape var: Shape = new Shape ();

Le morceau de code qui prend soin de dessin a été introduit pour la touche de contrôle et, si pressée, est intéressé 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 tirage (erase_shape, null, null, "effacer")..;

Suite ...

Peinture pour créer une application dans Flash CS3

Comme expliqué dans Flash Actionscript concours: l'outil d'effacement vous ne pouvez pas "effacer" une zone particulière d'un Sprite, MovieClip ou forme sur laquelle des lignes ou des rectangles ont été tirées à l'aide du curseur graphique. Il est, en fait, la seule méthode clear() , cependant, n'a aucun effet sur ​​toute la surface de l'objet. La solution à ce problème réside dans la possibilité d'utiliser le bitmap et objets BitmapData. Comme nous le verrons, nous pouvons directement accéder et manipuler des données bitmap afin de "gommer" coups avec un instrument "effaceur" réel.

Présenter deux méthodes différentes pour atteindre la "porte". per esempio. Le premier "tirage" (supprimer) les données directement dans le BitmapData, en utilisant la méthode fillRect() - peut également être utilisé 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 ce genre d'organisation est minimalement nécessaire pour atteindre un peintre Flash simple. Le schéma présenté ci-dessous s'applique à la fois les propositions de la «porte»:

pattern-bitmap

J'ai créé trois couches: la première, MovieClip ou Sprite, le contexte et le travail du gestionnaire d'événement (MouseDown, MouseMove et MouseUp). Le second, le bitmap, il est de notre couches principales, celle qui sera effectivement établi graphiques seront appliquées et sur lequel la "porte". , ecc…). La troisième couche et la dernière, la forme, traite de deux questions: la première est qu'il permet d'utiliser directement les fonctions prévues par le curseur graphique (comme lineStyle , drawRect() , etc ...). Elle accroît également la performance au cours du tableau de suivi, comme expliqué en détail ci-dessous.

Suite ...


Arrêtez SOPA