jun 17
Door: Rian Verhagen

Met de Graphics API in AS3 is het heel simpel om dynamisch een cirkel te tekenen met de drawCircle functie. Ook een cirkel met een uitsparing is geen probleem. Moeilijker wordt het als je een dergelijke cirkel als masker wilt gebruiken. Flash ziet zo'n holle cirkel bij het maskeren simpelweg als een compleet gevulde cirkel. Weg effect!

De oplossing voor dit probleem (bug?) is om de getekende cirkel eerst in een BitmapData object te stoppen, en dat dan als masker te gebruiken. Hieronder vind je een code voorbeeld:

CODE:
  1. var layerMask:Sprite = new Sprite();
  2.  
  3. //Zwarte fill van de cirkel
  4. layerMask.graphics.beginFill(0x000000);
  5. layerMask.graphics.drawCircle(150,150, 150);
  6. layerMask.graphics.drawCircle(150,150, 100);
  7. layerMask.graphics.endFill();
  8.  
  9. //BitmapData object aanmaken, transparant met een zwarte achtergrond.
  10. var layerMaskBMD:BitmapData = new BitmapData(layerMask.width, layerMask.height, true, 0x000000);
  11. layerMaskBMD.draw(layerMask);
  12.  
  13. //BitmapData object in een Bitmap object stoppen
  14.  
  15. var layerMaskBitmap:Bitmap = new Bitmap(layerMaskBMD);
  16.  
  17. //De cirkel is nu vertaald naar een bitmap en kan dus verwijderd worden.
  18.  
  19. layerMask.graphics.clear();
  20.  
  21. //Bitmap toevoegen aan layerMask.
  22. layerMask.addChild(layerMaskBitmap);
  23.  
  24. layerMask.cacheAsBitmap = true;
  25.  
  26. addChild(layerMask);
  27.  

De sprite layerMask kan nu gebruikt worden als mask. Voorwaarde is wel dat het te maskeren DisplayObject de property cacheAsBitmap = true heeft.

Gerelateerde

Laat hier je reactie achter

*
Vul hier de code in
Anti-Spam Image