Artikel Tagged 'draw () "

Malerei Flash CS3: Echtzeit Lösch-Funktion

Beginnend mit den Codes versehen in Flash CS3 Erstellen Sie eine Farbe und Durchführung kleinerer Änderungen, erheblich verbessern kann das Instrument der "löschen". Hinzufügen einer Form nicht sichtbar ist, können Sie es als einen "Plan" zu verwenden, um den Lauf draw() Mischmodus "löschen". Wie im Beispiel unten gezeigt, nach der Zeichnung etwas, halten Sie die Strg-Taste und die Wirkung der "Annullierung" ist jetzt in Echtzeit.

Loading Flash ...

Der Code wird wie folgt - Quelle :

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 ; Import flash.events. MouseEvent ;
. BitmapData ; Import flash.display. BitmapData ;
. Bitmap ; Import flash.display. Bitmaps ;
. GradientType ; . import flash.display GradientType ;
/ /
. Matrix ; flash.geom Importe. Matrix ;
/ /
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: Anzahl = event_spr Praktika stageWidth;..
Number = event_spr . stage . stageHeight - 32 ; var area_height: Anzahl .. = event_spr Praktika stageHeight - 32;
/ /
String = GradientType . LINEAR ; fillType var: String = GradientType . LINEAR;
: Array = [ 0xFF0000 , 0x00FF00 , 0x0000ff ] ; var Farben: Array = [0xFF0000, 0x00FF00, 0x0000FF];
: Array = [ 1 , 1 , 1 ] ; var alphas: Array = [1, 1, 1];
: Array = [ 0 , 128 , 255 ] ; var ratios: Array = [0, 128, 255];
String = SpreadMethod . PAD ; spreadMethod var: String = SpreadMethod PAD;.
: Matrix = new Matrix ( ) ; var matrix: Matrix = new Matrix ();
createGradientBox ( area_width , area_height , 1 , 0 , 0 ) ; . Matrix createGradientBox (area_width, area_height, 1, 0, 0);
/ /
event_spr . graphics ) { mit (event_spr. Grafiken) {
fillType , colors , alphas , ratios , matrix , spreadMethod ) ; beginGradientFill (fillType, Farben, Alphas, Verhältnisse, Matrix, spreadMethod);
0 , 0 , area_width , area_height ) ; drawRect (0, 0, area_width, area_height);
; endFill ();
}
/ / Paint-Ereignis
( 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 (event_spr. Breite, Höhe event_spr, true, 0.);
Bitmap = new Bitmap ( bmpd ) ; var bmp: Bitmap = new Bitmap (bmpd);
bmp ) ; addChild (bmp);
/ /
/ / Temporäre Form
Shape = new Shape ( ) ; var draw_shape: Form = new Form ();
draw_shape ) ; addChild (draw_shape);
/ /
/ / Shape nicht sichtbar ist, verwendet für die "Stornierung"
Shape = new Shape ( ) ; var erase_shape: Form = new Form ();

/ /
e : MouseEvent ) : void { _onMouseDown Funktion (e: MouseEvent ): void {
) ; debug ("_onMouseDown");
. lineStyle ( 10 , 0xffffff , 1 ) ; .. draw_shape Grafiken lineStyle (10, 0xffffff, 1);
. lineStyle ( 20 , 0xffffff , 1 ) ; .. erase_shape Grafiken lineStyle (20, 0xffffff, 1);
. moveTo ( e . localX , e . localY ) ; .. draw_shape Grafiken moveTo (and. localX und localY.);
. moveTo ( e . localX , e . localY ) ; .. erase_shape Grafiken moveTo (and. localX und localY.);
md = true;
}
/ /
e : MouseEvent ) : void { _onMouseUp Funktion (e: MouseEvent ): void {
md = false;
. draw ( draw_shape ) ; .. bmp bitmapData draw (draw_shape);
. clear ( ) ; . draw_shape Grafiken clear ().;
. clear ( ) ; . erase_shape Grafiken clear ().;
}
/ /
e : MouseEvent ) : void { _onMouseMove Funktion (e: MouseEvent ): void {
) ; debug ("_onMouseMove");
md && ! e . ctrlKey ) { if (md & &! und. ctrlKey) {
. lineTo ( e . localX , e . localY ) ; .. draw_shape Grafiken lineTo (and. localX und localY.);
( md && e . ctrlKey ) { } Else if (md & & und. CtrlKey) {
. lineTo ( e . localX , e . localY ) ; .. erase_shape Grafiken lineTo (and. localX und localY.);
. draw ( erase_shape , null , null , "erase" ) ; bmp bitmapData draw (erase_shape, null, null, "löschen")..;
}
}
/ /
v : String ) : void { Funktion debug (v: String ): void {
: Date = new Date ( ) ; var d: Date = new Date ();
d . getMinutes ( ) + ":" + d . getSeconds ( ) + ":" + d . getMilliseconds ( ) + ": " + v ) ; trace (d. getMinutes () + "" + d. getSeconds () + "" + d. getMilliseconds () + "" + st);
}

): Wir haben eine neue Form, fügte erase_shape nicht sichtbar (es war nicht jedem durchgeführt addChild() ):

1
2
3
...
/ / Shape nicht sichtbar ist, verwendet für die "Stornierung"
Shape = new Shape ( ) ; var erase_shape: Form = new Form ();

Das Stück Code, das kümmert Zeichnung wurde für die Steuer-Taste eingeführt und, wenn diese Taste gedrückt, ist daran interessiert, genau die Form erase_shape und kopiert die Bitmap:

1
2
3
....
. lineTo ( e . localX , e . localY ) ; .. erase_shape Grafiken lineTo (and. localX und localY.);
. draw ( erase_shape , null , null , "erase" ) ; bmp bitmapData draw (erase_shape, null, null, "löschen")..;

Fortsetzung ...

Malen Sie auf eine Anwendung in Flash CS3 erstellen

Wie in erläutert Flash Actionscript Contest: Lösch-Funktion kann man nicht "löschen" einen bestimmten Bereich eines Sprite, MovieClip oder Form, auf denen Linien oder Rechtecke gezeichnet mit den Grafik-Cursor wurden. Es gibt in der Tat, die einzige Methode clear() , hat jedoch keine Auswirkungen auf die gesamte Fläche des Objekts. Die Lösung für dieses Problem liegt in der Möglichkeit der Verwendung der Bitmap-und BitmapData-Objekte. Wie wir sehen werden wir direkt zugreifen und diese manipulieren Bitmap-Daten, um "Löschen" Schläge mit einem echten Instrument "Radiergummi".

Zwei unterschiedliche Methoden, um das "Tor" zu erzielen. per esempio. Die erste "draw" (Löschen) von Daten direkt in das BitmapData, mit der Methode fillRect() - können auch verwendet werden setPixel() zum Beispiel. Die zweite Methode, die ich bevorzuge, verwendet die Methoden von Fusionen (blendMode).

Zunächst einmal wollen wir sehen, welche Art von Organisation minimal ist notwendig, um eine einfache Flash-Painter zu erreichen. Das Schema unten dargestellten gilt sowohl für die Vorschläge der "Tor":

Bitmap-Muster-

Ich habe drei Schichten: die erste, MovieClip oder Sprite, Hintergrund und die Arbeit der Event-Handler (MouseDown, MouseMove und MouseUp). Die zweite ist die Bitmap unsere Schichten, eine, die tatsächlich gezogen werden Grafiken angewendet werden und auf denen das "Tor". , ecc…). Der dritte und letzte Schicht, die Form, geht es um zwei Fragen: die erste ist, dass er direkt die Funktionen der Grafik-Cursor (wie vorgesehen ermöglicht lineStyle , drawRect() , etc ...). Es steigert auch die Leistung während des Tracking-Chart, wie unten im Detail erläutert.

Fortsetzung ...