Stvorite bojama u Flash CS3
Nedjelja 10 Veljača, 2008 Kao što je objašnjeno u Flash Actionscript natječaj: oruđe brisanje nije moguće "izbrisati" određenom području Sprite jedan, ili Oblik MovieClip koja su nacrtana linija ili rectangles koristeći pokazivač grafika. Tu je, u stvari, jedini način clear() koji, međutim, stupiti na snagu na području naše predmet. U rješenje problema leži u mogućnosti korištenja objekata i bitmap BitmapData. Mi ćemo vidjeti kako mi može direktno pristupati podacima i manipulirati skenirana, kako bi se "izbrisali" su svojstva s pravog instrumenta "otkazati".
Će predstaviti dva različita načina za postizanje "izbrisati". Prvi "Slika" (jasno) podatke direktno u BitmapData, koristeći metodu fillRect() može se koristiti setPixel() primjer. Druga metoda, s jedne bih, koristi metode spajanja (blendMode).
Najprije smo vidjeti kakve organizacije je minimalno potrebno da bi se postigao jednostavan Slikar u Flash-u. U nastavku opisuju se odnosi predstavljena oba prijedloga u "brisanje":

Sam urednik tri razine: prva, MovieClip ili Sprite, i radi kao pozadinu događaja rukovatelj (MouseDown, MouseMove i MouseUp). Drugi, bitmap, naš je glavni sloj, koji zapravo sadrži grafika dizajniran i koji će također značajka "otkazati". Treća i konačna razina, oblik, rješava dva problema: prvo, što vam omogućuje da se izravno koristiti funkcije na raspolaganju od grafike pokazivač (kao lineStyle drawRect() itd. ...). Također povećava učinkovitost tijekom praćenja karta, detaljno je opisan u nastavku.
Metoda 1 - Izravni pristup podacima bitmapa
Ovaj "uzorak" koristi metodu fillRect() direktno na BitmapData (sloj 2) nakon slika je kopiran (koristeći metodu draw() by Oblik (sloj 3) u bitmap (sloj 2).
Da biste razumjeli kako je to isti film sa slojevima i prodro u pseudo 3D - Izvučeni u boji Prilog - izvor:
Kao što možete vidjeti ga privlači na 3 razine, u obliku. Kada se događaju MouseUp Oblik i sadržaj se kopira u bitmap (a time i podataka su u BitmapData) i oblik je čisto clear()
Napomena: ovaj zadnji trenutku, clear() Oblik ne može underestimated. Neki primjeri slikar u Flashu (skoro svi koji su istinski "odustali") crtati izravno na MovieClip ili Oblik, čuvanje podataka na njima nacrtan. Nakon nekog vremena 'da izvući svoj sustav usporava, jer je područje "vektor" u MovieClip povećava. Metoda sam predstavio ovaj problem je riješena, jer vektor podataka Oblik, kad kopira se u skenirana tasformati bitni i oblik je izbrisan, oslobađanje memorije i restituiendo protok na posao!
Ctrl (kontrola) je "očišćen" izravno putem BitmapData fillRect() To je moguće jer fillRect() kao i druge metode koje djeluju na BitmapData, neka vam postaviti "boju" po 0xARGB, gdje se je alfa vrijednost, transparentnost.
Kodeks je kako slijedi - izvor:
- . MouseEvent ; uvoz flash. događaja. MouseEvent;
- . BitmapData ; uvoz flash. zaslonu. BitmapData;
- . Bitmap ; uvoz flash. zaslonu. bitmap;
- . GradientType ; uvoz flash. zaslonu. GradientType;
- / /
- . Matrix ; uvoz flash. Geom. Matica;
- / /
- = false ; var md: Boolean = false;
- / /
- Sprite ( ) ; var event_spr: Sprite = novi Sprite ();
- ; addChild (event_spr);
- / /
- = event_spr. stage . stageWidth ; var area_width: Number = event_spr. pozornici. stageWidth;
- = event_spr. stage . stageHeight - 32 ; var area_height: Number = event_spr. pozornici. stageHeight - 32;
- / /
- = GradientType. LINEAR ; var fillType: String = GradientType. LINEARNI;
- = [ 0xFF0000, 0x00FF00, 0x0000ff ] ; var boje: Array = [0xFF0000, 0x00FF00, 0x0000ff];
- = [ 1 , 1 , 1 ] ; var alphas: Array = [1, 1, 1];
- = [ 0 , 128 , 255 ] ; var Pokazivači: Array = [0, 128, 255];
- = SpreadMethod. PAD ; var spreadMethod: String = SpreadMethod. PAD;
- Matrix ( ) ; var matrica: Matrica = novih matrica ();
- area_width, area_height, 1 , 0 , 0 ) ; matrica. createGradientBox (area_width, area_height, 1, 0, 0);
- / /
- event_spr. graphics ) { s (event_spr. grafika) (
- fillType,colors,alphas,ratios,matrix,spreadMethod ) ; beginGradientFill (fillType, boje, alphas, Pokazivači, matrica, spreadMethod);
- , 0 ,area_width, area_height ) ; drawRect (0, 0, area_width, area_height);
- ; endFill ();
- )
- / / Boja događaj
- 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 ( event_spr. width ,event_spr. height , true , 0 ) ; var bmpd: BitmapData = novi BitmapData (event_spr. širina, event_spr. vis, istina, 0);
- Bitmap ( bmpd ) ; var bmp: = novi bitmapa bitmapa (bmpd);
- ; addChild (bmp);
- / / Privremeno oblik
- Shape ( ) ; var draw_shape: Oblik = novi oblik ();
- ; addChild (draw_shape);
- / /
- e :MouseEvent ) : void { _onMouseDown funkciju (e: MouseEvent): void (
- ) ; 'debug' ( "_onMouseDown");
- var c: UINT = 0xffffff;
- ( 10 ,c, 1 ) ; draw_shape. grafika. LineStyle (10, c, 1);
- ( e . localX , e . localY ) ; draw_shape. grafika. moveTo (E. localX, i. localY);
- md = true;
- )
- / /
- e :MouseEvent ) : void { _onMouseUp funkciju (e: MouseEvent): void (
- md = false;
- ( draw_shape ) ; bmp. BitmapData. crtanje (draw_shape);
- ( ) ; draw_shape. grafika. jasan ();
- )
- / /
- e :MouseEvent ) : void { _onMouseMove funkciju (e: MouseEvent): void (
- ) ; 'debug' ( "_onMouseMove");
- md && ! e . ctrlKey ) { if (MD & &! a. ctrlKey) (
- ( e . localX , e . localY ) ; draw_shape. grafika. lineTo (E. localX, i. localY);
- ( md && e . ctrlKey ) { ) Jer ako je (E & & md. CtrlKey) (
- ( new Rectangle ( e . target . mouseX - 10 , e . target . mouseY - 10 , 20 , 20 ) , 0 ) ; bmp. BitmapData. fillRect (novi pravokutnik (E. cilj. mouseX - 10, te. cilj. mišji - 10, 20, 20), 0);
- )
- )
- / /
- v: String ) : void { 'debug' funkcija (v: String): void (
- = new Date ( ) ; var d: Date = novi Datum ();
- d. getMinutes ( ) + ":" +d. getSeconds ( ) + ":" +d. getMilliseconds ( ) + ": " +v ) ; trag (D. getMinutes () + ":" + d. getSeconds () + ":" + d. getMilliseconds () + ":" + v);
- )
Redak 61, kao što je prikazano u kod gore, kad je vožnja ključ je stisnut. Kao što možete vidjeti ovaj dio koda vuće direktno u BitmapData s boju 0, ili 0x0000!
METODA 2 - Korištenje metoda spajanja
To je vjerojatno najbolje kad se omogućava da koristite bilo koju vrstu "otkazati". Za razliku od prethodnih metoda ne izravno pristupiti podacima u BitmapData bitmapa, ali vam koristiti metode spajanja (blendMode) i kopiju bitmapa na način koji vas draw().
Izdanje 3D - Izvor:
Upravo na isti način na koji biste kopirali podatke iz bitmapa Oblik, u "brisanje" je "istovremeno" kopiranjem podataka iz obliku bitmapa, ali ovaj put je postavka blendMode način draw() za erase
Kodeks je kako slijedi - izvor:
- . MouseEvent ; uvoz flash. događaja. MouseEvent;
- . BitmapData ; uvoz flash. zaslonu. BitmapData;
- . Bitmap ; uvoz flash. zaslonu. bitmap;
- . GradientType ; uvoz flash. zaslonu. GradientType;
- / /
- . Matrix ; uvoz flash. Geom. Matica;
- / /
- = false ; var md: Boolean = false;
- / /
- Sprite ( ) ; var event_spr: Sprite = novi Sprite ();
- ; addChild (event_spr);
- / /
- = event_spr. stage . stageWidth ; var area_width: Number = event_spr. pozornici. stageWidth;
- = event_spr. stage . stageHeight - 32 ; var area_height: Number = event_spr. pozornici. stageHeight - 32;
- / /
- = GradientType. LINEAR ; var fillType: String = GradientType. LINEARNI;
- = [ 0xFF0000, 0x00FF00, 0x0000ff ] ; var boje: Array = [0xFF0000, 0x00FF00, 0x0000ff];
- = [ 1 , 1 , 1 ] ; var alphas: Array = [1, 1, 1];
- = [ 0 , 128 , 255 ] ; var Pokazivači: Array = [0, 128, 255];
- = SpreadMethod. PAD ; var spreadMethod: String = SpreadMethod. PAD;
- Matrix ( ) ; var matrica: Matrica = novih matrica ();
- area_width, area_height, 1 , 0 , 0 ) ; matrica. createGradientBox (area_width, area_height, 1, 0, 0);
- / /
- event_spr. graphics ) { s (event_spr. grafika) (
- fillType,colors,alphas,ratios,matrix,spreadMethod ) ; beginGradientFill (fillType, boje, alphas, Pokazivači, matrica, spreadMethod);
- , 0 ,area_width, area_height ) ; drawRect (0, 0, area_width, area_height);
- ; endFill ();
- )
- / / Boja događaj
- 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 ( event_spr. width ,event_spr. height , true , 0 ) ; var bmpd: BitmapData = novi BitmapData (event_spr. širina, event_spr. vis, istina, 0);
- Bitmap ( bmpd ) ; var bmp: = novi bitmapa bitmapa (bmpd);
- ; addChild (bmp);
- / / Privremeno oblik
- Shape ( ) ; var draw_shape: Oblik = novi oblik ();
- ; addChild (draw_shape);
- / /
- e :MouseEvent ) : void { _onMouseDown funkciju (e: MouseEvent): void (
- ) ; 'debug' ( "_onMouseDown");
- ! e . ctrlKey ?0xffffff:0x000000 ) ; var c: UINT = (! a. ctrlKey? 0xffffff: 0x000000);
- ( 10 , c, 1 ) ; draw_shape. grafika. LineStyle (10, c, 1);
- ( e . localX , e . localY ) ; draw_shape. grafika. moveTo (E. localX, i. localY);
- md = true;
- )
- / /
- e :MouseEvent ) : void { _onMouseUp funkciju (e: MouseEvent): void (
- md = false;
- ( draw_shape, null , null , ( e . ctrlKey ? "erase" : "normal" ) ) ; bmp. BitmapData. crtanje (draw_shape, null, null, (e. ctrlKey? "brisanje", "normalno"));
- ( ) ; draw_shape. grafika. jasan ();
- )
- / /
- e :MouseEvent ) : void { _onMouseMove funkciju (e: MouseEvent): void (
- ) ; 'debug' ( "_onMouseMove");
- md ) { if (MD) (
- ( e . localX , e . localY ) ; draw_shape. grafika. lineTo (E. localX, i. localY);
- )
- )
- / /
- v: String ) : void { 'debug' funkcija (v: String): void (
- = new Date ( ) ; var d: Date = novi Datum ();
- d. getMinutes ( ) + ":" +d. getSeconds ( ) + ":" +d. getMilliseconds ( ) + ": " +v ) ; trag (D. getMinutes () + ":" + d. getSeconds () + ":" + d. getMilliseconds () + ":" + v);
- )
Ovaj broj nije jako različit od prethodne godine. Prava razlika je u retku 52! Ovo određuje način fuzija "Kada kopirate iz obliku bitmapa, kad je ključ pritiska se koristi mješavina erase
Uz to je to! Vrati se na razgovor o bitmapa u najkraćem mogućem roku i razlike između MovieClip, Sprite, oblika i bitmap ... Sve stavke grafiku!



















Undolog.com »Blog Arhiv» Kako za spremanje slike u Flash CS3 je rekao:
[...] Spremanje slike u Flash CS3 Tags: ActionScript 3.0, bitmap, BitmapData, Flash CS3, GD, GD knjižnica, internet, PHP, Flash Spremi slike, razvoj, TutorialsCon Flash CS3 bitmapa koristi se tako da se popravila želite napraviti mali Boja. Mi smo već vidjeli koliko malo Boja (vidi Stvaranje € ™ Boja aplikacija u Flashu CS3 i slikar: jednostavan program za crtanje u Flash CS3 Pro) sposoban za potporni je "odustati" - izbriši funkcioniraju kroz korištenje posebice u sloju Oblik i bitmapa. Mi sada reći da Flash (za razliku od Flex) ne dopušta im kodiranje (upišite JPG ili PNG) će automatski spremiti bitmap slike. No, možete raditi oko prepreka pomoću skripti na strani poslužitelja i mogućnost za slanje podataka na flash u post. [...]
Vodič ActionScript 3 u Flash CS3: događaje i miš | Marčelo Surdo je rekao:
[...] Napravite Boja u Flash CS3 [...]
Gianni je rekao:
Odlično rješenje, prikladno za innnumerevoli rješenja vezanih za web grafiku aplikacije.
Giovambattista Fazioli je rekao:
@ Gianni: hvala! Vidi također Slikar: jednostavan program za crtanje u Flash CS3 Pro