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":

sheme-bitmapa

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).

Flash playera Učitavanje ...

Da biste razumjeli kako je to isti film sa slojevima i prodro u pseudo 3D - Izvučeni u boji Prilog - izvor:

Flash playera Učitavanje ...

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:

Actionscript:
  1. . MouseEvent ; uvoz flash. događaja. MouseEvent;
  2. . BitmapData ; uvoz flash. zaslonu. BitmapData;
  3. . Bitmap ; uvoz flash. zaslonu. bitmap;
  4. . GradientType ; uvoz flash. zaslonu. GradientType;
  5. / /
  6. . Matrix ; uvoz flash. Geom. Matica;
  7. / /
  8. = false ; var md: Boolean = false;
  9. / /
  10. Sprite ( ) ; var event_spr: Sprite = novi Sprite ();
  11. ; addChild (event_spr);
  12. / /
  13. = event_spr. stage . stageWidth ; var area_width: Number = event_spr. pozornici. stageWidth;
  14. = event_spr. stage . stageHeight - 32 ; var area_height: Number = event_spr. pozornici. stageHeight - 32;
  15. / /
  16. = GradientType. LINEAR ; var fillType: String = GradientType. LINEARNI;
  17. = [ 0xFF0000, 0x00FF00, 0x0000ff ] ; var boje: Array = [0xFF0000, 0x00FF00, 0x0000ff];
  18. = [ 1 , 1 , 1 ] ; var alphas: Array = [1, 1, 1];
  19. = [ 0 , 128 , 255 ] ; var Pokazivači: Array = [0, 128, 255];
  20. = SpreadMethod. PAD ; var spreadMethod: String = SpreadMethod. PAD;
  21. Matrix ( ) ; var matrica: Matrica = novih matrica ();
  22. area_width, area_height, 1 , 0 , 0 ) ; matrica. createGradientBox (area_width, area_height, 1, 0, 0);
  23. / /
  24. event_spr. graphics ) { s (event_spr. grafika) (
  25. fillType,colors,alphas,ratios,matrix,spreadMethod ) ; beginGradientFill (fillType, boje, alphas, Pokazivači, matrica, spreadMethod);
  26. , 0 ,area_width, area_height ) ; drawRect (0, 0, area_width, area_height);
  27. ; endFill ();
  28. )
  29. / / Boja događaj
  30. MouseEvent. MOUSE_DOWN , _onMouseDown ) ; event_spr. addEventListener (MouseEvent. MOUSE_DOWN, _onMouseDown);
  31. MouseEvent. MOUSE_MOVE , _onMouseMove ) ; event_spr. addEventListener (MouseEvent. MOUSE_MOVE, _onMouseMove);
  32. MouseEvent. MOUSE_UP , _onMouseUp ) ; event_spr. addEventListener (MouseEvent. MOUSE_UP, _onMouseUp);
  33. MouseEvent. MOUSE_OUT , _onMouseUp ) ; event_spr. addEventListener (MouseEvent. MOUSE_OUT, _onMouseUp);
  34. / /
  35. BitmapData ( event_spr. width ,event_spr. height , true , 0 ) ; var bmpd: BitmapData = novi BitmapData (event_spr. širina, event_spr. vis, istina, 0);
  36. Bitmap ( bmpd ) ; var bmp: = novi bitmapa bitmapa (bmpd);
  37. ; addChild (bmp);
  38. / / Privremeno oblik
  39. Shape ( ) ; var draw_shape: Oblik = novi oblik ();
  40. ; addChild (draw_shape);
  41. / /
  42. e :MouseEvent ) : void { _onMouseDown funkciju (e: MouseEvent): void (
  43. ) ; 'debug' ( "_onMouseDown");
  44. var c: UINT = 0xffffff;
  45. ( 10 ,c, 1 ) ; draw_shape. grafika. LineStyle (10, c, 1);
  46. ( e . localX , e . localY ) ; draw_shape. grafika. moveTo (E. localX, i. localY);
  47. md = true;
  48. )
  49. / /
  50. e :MouseEvent ) : void { _onMouseUp funkciju (e: MouseEvent): void (
  51. md = false;
  52. ( draw_shape ) ; bmp. BitmapData. crtanje (draw_shape);
  53. ( ) ; draw_shape. grafika. jasan ();
  54. )
  55. / /
  56. e :MouseEvent ) : void { _onMouseMove funkciju (e: MouseEvent): void (
  57. ) ; 'debug' ( "_onMouseMove");
  58. md && ! e . ctrlKey ) { if (MD & &! a. ctrlKey) (
  59. ( e . localX , e . localY ) ; draw_shape. grafika. lineTo (E. localX, i. localY);
  60. ( md && e . ctrlKey ) { ) Jer ako je (E & & md. CtrlKey) (
  61. ( 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);
  62. )
  63. )
  64. / /
  65. v: String ) : void { 'debug' funkcija (v: String): void (
  66. = new Date ( ) ; var d: Date = novi Datum ();
  67. d. getMinutes ( ) + ":" +d. getSeconds ( ) + ":" +d. getMilliseconds ( ) + ": " +v ) ; trag (D. getMinutes () + ":" + d. getSeconds () + ":" + d. getMilliseconds () + ":" + v);
  68. )

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().

Flash playera Učitavanje ...

Izdanje 3D - Izvor:

Flash playera Učitavanje ...

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:

Actionscript:
  1. . MouseEvent ; uvoz flash. događaja. MouseEvent;
  2. . BitmapData ; uvoz flash. zaslonu. BitmapData;
  3. . Bitmap ; uvoz flash. zaslonu. bitmap;
  4. . GradientType ; uvoz flash. zaslonu. GradientType;
  5. / /
  6. . Matrix ; uvoz flash. Geom. Matica;
  7. / /
  8. = false ; var md: Boolean = false;
  9. / /
  10. Sprite ( ) ; var event_spr: Sprite = novi Sprite ();
  11. ; addChild (event_spr);
  12. / /
  13. = event_spr. stage . stageWidth ; var area_width: Number = event_spr. pozornici. stageWidth;
  14. = event_spr. stage . stageHeight - 32 ; var area_height: Number = event_spr. pozornici. stageHeight - 32;
  15. / /
  16. = GradientType. LINEAR ; var fillType: String = GradientType. LINEARNI;
  17. = [ 0xFF0000, 0x00FF00, 0x0000ff ] ; var boje: Array = [0xFF0000, 0x00FF00, 0x0000ff];
  18. = [ 1 , 1 , 1 ] ; var alphas: Array = [1, 1, 1];
  19. = [ 0 , 128 , 255 ] ; var Pokazivači: Array = [0, 128, 255];
  20. = SpreadMethod. PAD ; var spreadMethod: String = SpreadMethod. PAD;
  21. Matrix ( ) ; var matrica: Matrica = novih matrica ();
  22. area_width, area_height, 1 , 0 , 0 ) ; matrica. createGradientBox (area_width, area_height, 1, 0, 0);
  23. / /
  24. event_spr. graphics ) { s (event_spr. grafika) (
  25. fillType,colors,alphas,ratios,matrix,spreadMethod ) ; beginGradientFill (fillType, boje, alphas, Pokazivači, matrica, spreadMethod);
  26. , 0 ,area_width, area_height ) ; drawRect (0, 0, area_width, area_height);
  27. ; endFill ();
  28. )
  29. / / Boja događaj
  30. MouseEvent. MOUSE_DOWN , _onMouseDown ) ; event_spr. addEventListener (MouseEvent. MOUSE_DOWN, _onMouseDown);
  31. MouseEvent. MOUSE_MOVE , _onMouseMove ) ; event_spr. addEventListener (MouseEvent. MOUSE_MOVE, _onMouseMove);
  32. MouseEvent. MOUSE_UP , _onMouseUp ) ; event_spr. addEventListener (MouseEvent. MOUSE_UP, _onMouseUp);
  33. MouseEvent. MOUSE_OUT , _onMouseUp ) ; event_spr. addEventListener (MouseEvent. MOUSE_OUT, _onMouseUp);
  34. / /
  35. BitmapData ( event_spr. width ,event_spr. height , true , 0 ) ; var bmpd: BitmapData = novi BitmapData (event_spr. širina, event_spr. vis, istina, 0);
  36. Bitmap ( bmpd ) ; var bmp: = novi bitmapa bitmapa (bmpd);
  37. ; addChild (bmp);
  38. / / Privremeno oblik
  39. Shape ( ) ; var draw_shape: Oblik = novi oblik ();
  40. ; addChild (draw_shape);
  41. / /
  42. e :MouseEvent ) : void { _onMouseDown funkciju (e: MouseEvent): void (
  43. ) ; 'debug' ( "_onMouseDown");
  44. ! e . ctrlKey ?0xffffff:0x000000 ) ; var c: UINT = (! a. ctrlKey? 0xffffff: 0x000000);
  45. ( 10 , c, 1 ) ; draw_shape. grafika. LineStyle (10, c, 1);
  46. ( e . localX , e . localY ) ; draw_shape. grafika. moveTo (E. localX, i. localY);
  47. md = true;
  48. )
  49. / /
  50. e :MouseEvent ) : void { _onMouseUp funkciju (e: MouseEvent): void (
  51. md = false;
  52. ( draw_shape, null , null , ( e . ctrlKey ? "erase" : "normal" ) ) ; bmp. BitmapData. crtanje (draw_shape, null, null, (e. ctrlKey? "brisanje", "normalno"));
  53. ( ) ; draw_shape. grafika. jasan ();
  54. )
  55. / /
  56. e :MouseEvent ) : void { _onMouseMove funkciju (e: MouseEvent): void (
  57. ) ; 'debug' ( "_onMouseMove");
  58. md ) { if (MD) (
  59. ( e . localX , e . localY ) ; draw_shape. grafika. lineTo (E. localX, i. localY);
  60. )
  61. )
  62. / /
  63. v: String ) : void { 'debug' funkcija (v: String): void (
  64. = new Date ( ) ; var d: Date = novi Datum ();
  65. d. getMinutes ( ) + ":" +d. getSeconds ( ) + ":" +d. getMilliseconds ( ) + ": " +v ) ; trag (D. getMinutes () + ":" + d. getSeconds () + ":" + d. getMilliseconds () + ":" + v);
  66. )

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!

Srodne post

4 komentara: "Stvaranje Boja u Flash CS3"

  1. getAvatar 1.0 Ponedjeljak, 31 Ožujak 2008 u 23:38
    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. [...]

  2. getAvatar 1.0 Srijeda, 08 Listopad, 2008 u 02:38
    Vodič ActionScript 3 u Flash CS3: događaje i miš | Marčelo Surdo je rekao:

    [...] Napravite Boja u Flash CS3 [...]

  3. getAvatar 1.0 Četvrtak, 30. listopada 2008 u 20:08
    Gianni je rekao:

    Odlično rješenje, prikladno za innnumerevoli rješenja vezanih za web grafiku aplikacije.

    Odgovor Citat
  4. getAvatar 1.0 Četvrtak, 30. listopada 2008 u 21:24
    Giovambattista Fazioli je rekao:

    @ Gianni: hvala! Vidi također Slikar: jednostavan program za crtanje u Flash CS3 Pro

    Odgovor Citat

Ostavite komentar

TAG XHTML <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <a <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Koristite <pre> da priložite broj