Actionscript 3.0 рдкрд░ рдкрд┐рдХреНрд╕реЗрд▓ рдкреНрд░рднрд╛рд╡

рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди

рдЗрддрдирд╛ рд╕рд░рд▓ рдкреНрд░рднрд╛рд╡ред рдХрдЯ рд╕реНрд░реЛрдд рдХреЗ рддрд╣рдд, рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдФрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдгред

рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐ рдпрд╣ рдпрд╛ рд╡рд╣ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рднрд╛рд╡ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд┐рдЪрд╛рд░ рдЖрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдореЗрд╢рд╛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рдЫреЛрдЯреЗ рдЕрдиреБрднрд╡ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдПред рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ред рдереЛрдбрд╝реЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ рдХрд┐ рдРрд╕рд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдЦреБрдж рдХреЛ рдкрд╛рда рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдкрд┐рдХреНрд╕реЗрд▓ рд╡реЗрд▓реНрдбрд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рдореБрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╡реЗрд▓реНрдбрд┐рдВрдЧ рдмрд┐рдВрджреБ рд╕реЗ рдмрд┐рдЦрд░реЗ рд╣реБрдП рдХрдгред рдФрд░, рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдПрдХ рд▓реЗрдЦ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВред рд▓реЗрдЦрдХ рдореБрдЭрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреЗрдХрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рдлрд╛рдпрджрд╛ рд╣реЛрдЧрд╛ред

рдПрд▓реНрдЧреЛрд░рд┐рдердо рд╡рд┐рд╡рд░рдг

рдкреНрд░рднрд╛рд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ рдкрд╛рда рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдореЛрдЪреНрдЪ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрдЯреЗ рд╣реБрдП рдкреЗрд░реНрд▓рд┐рди рд╢реЛрд░ ( рдбреЙрдХреНрдЯрд░ ) рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд╣реИред рдкрд╛рда рдХреЗ рдКрдкрд░ рдПрдХ рдореБрдЦреМрдЯрд╛ рд╣реИ рдЬреЛ рдкрд╛рда рдХреЛ рдЦреЛрд▓рддреЗ рд╣реБрдП рдЕрдХреНрд╖ OX рдХреЗ рджрд╛рдИрдВ рдУрд░ рдЪрд▓рддрд╛ рд╣реИред рдореБрдЦреНрдп рд▓реВрдк рдореЗрдВ, рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдореБрдЦреМрдЯрд╛ рдХрд╛ рджрд╛рдпрд╛рдБ рдХрд┐рдирд╛рд░рд╛ рдЕрдм рдХрд╣рд╛рдБ рд╕реНрдерд┐рдд рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ Y рдХреЗ рд▓рд┐рдП, рдкрд╛рда рдХреЗ рд╕рд╛рде рдмрд┐рдЯрдореИрдк рдХреА рдКрдБрдЪрд╛рдИ рд╕реЗ, рд╣рдореЗрдВ рдПрдХ рдЕрдкрд╛рд░рджрд░реНрд╢реА рдкрд┐рдХреНрд╕реЗрд▓ рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЪреЗрддрди рдХрд░рдирд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдВ рд╣рдо рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ "рд╡реЗрд▓реНрдбрд┐рдВрдЧ" рдмрд┐рдВрджреБ рдЕрдм рдХрд╣рд╛рдВ рд╣реИред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдкрд╛рда BlendMode.ERASE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдЯрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдорд┐рд╢реНрд░рд┐рдд рд╡рд╕реНрддреБ рдХреЗ рдЕрд▓реНрдлрд╛ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреГрд╖реНрдарднреВрдорд┐ рд╡рд╕реНрддреБ рдХреЗ рдкрд┐рдХреНрд╕рд▓ рдХреЛ рдорд┐рдЯрд╛ рджреЗрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, 0xFF рдХреЗ рдмрд░рд╛рдмрд░ рдЕрд▓реНрдлрд╛ рдХреЗ рд╕рд╛рде, рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдХрд╛ рдореВрд▓реНрдп 0x00 рд╣реЛрдЧрд╛ред

рд╢реЛрд░ рдкрд╛рда
рдкрд╛рда рдХреЗ рд╕рд╛рде рдмрд┐рдЯрдореИрдк рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ред
рдХреЛрдб
private function GetMaskedText(text:String):BitmapData { var tf:TextField = new TextField(); var format:TextFormat = new TextFormat("Arial", 60, 0xFFFFFF, true); tf.defaultTextFormat = format; tf.text = text; tf.width = tf.textWidth + 4.0; tf.height = tf.textHeight + 4.0; tf.filters = [new GlowFilter(0xFFFFFF, 1.0, 2, 2, 4, 3)]; var w:int = tf.width; var h:int = tf.height; var noiseBdata:BitmapData = new BitmapData(w, h, true, 0xFFFFFFFF); //         var channels:int = BitmapDataChannel.GREEN | BitmapDataChannel.RED; //    noiseBdata.perlinNoise( w / 6 , h / 4 , 6 , int(Math.random() * 1000) , false , false , channels , false); //    noiseBdata.colorTransform(noiseBdata.rect, new ColorTransform(1.4, 1.4, 1.4)); var noiseBmp:Bitmap = new Bitmap(noiseBdata); //    var textBdata:BitmapData = new BitmapData(w, h, true, 0x00000000); textBdata.draw(tf); var textBmp:Bitmap = new Bitmap(textBdata); //          var eraseTextBdata:BitmapData = noiseBdata.clone(); eraseTextBdata.draw(noiseBmp); eraseTextBdata.draw(textBmp, null, null, BlendMode.ERASE); var eraseTextBmp:Bitmap = new Bitmap(eraseTextBdata); //  ,      var eraseBackByTextBdata:BitmapData = noiseBdata.clone(); eraseBackByTextBdata.draw(eraseTextBmp, null, null, BlendMode.ERASE); eraseBackByTextBdata.applyFilter( eraseBackByTextBdata , eraseBackByTextBdata.rect , new Point() , new GlowFilter(0xFFFFFF, 1.0, 3, 3) ); noiseBdata.dispose(); textBdata.dispose(); eraseTextBdata.dispose(); head = new BitmapData(6, 6, true, 0xffFFFFFF); return eraseBackByTextBdata; } 



рдЕрдм рдЖрдкрдХреЛ рджреГрд╢реНрдп рдореЗрдВ рдкрд╛рда рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдореБрдЦреМрдЯрд╛ рдбрд╛рд▓реЗрдВред
рдХреЛрдб
 private var textBdata:BitmapData; private var textBmp:Bitmap; private var txtMask:Shape; private var btnRestart:MiniButton; private function InitalizeLayout():void { screen = new BitmapData(W, H, true, 0x00000000); addChild(new Bitmap(screen)); textBdata = GetMaskedText("..Hello world.."); textBmp = new Bitmap(textBdata); textBmp.x = (W - textBmp.width) * 0.5; textBmp.y = (H - textBmp.height) * 0.5; addChild(textBmp); txtMask = new Shape(); txtMask.graphics.beginFill(0xFFFFFF); txtMask.graphics.drawRect(0, 0, 4, textBmp.height); txtMask.graphics.endFill(); txtMask.x = textBmp.x; txtMask.y = textBmp.y; textBmp.mask = txtMask; addChild(txtMask); btnRestart = new MiniButton("restart"); btnRestart.x = (W - MiniButton.W) * 0.5; btnRestart.y = 10.0; addChild(btnRestart); } 


рд╕реНрдХреНрд░реАрди рд╡реЗрд░рд┐рдПрдмрд▓ рдПрдХ рдмрдбрд╝рд╛ рдмрд┐рдЯрдореИрдкрдбрд╛рдЯрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдгреЛрдВ рдХреЛ рдЦреАрдВрдЪрд╛ рдЬрд╛рдПрдЧрд╛ред рддреБрд░рдВрдд рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЪреЗрддрд╛рд╡рдиреА, рдХрдгреЛрдВ рдХреЛ рд╕рдВрдЪрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╡реЗрдХреНрдЯрд░ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдмрд╕-рд▓рд┐рдВрдХреНрдб рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЕрдХреНрд╕рд░ рдХрдгреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рд╡реЗрдХреНрдЯрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреАред рдФрд░ рд╕реВрдЪреА рд╕реЗ рдПрдХ рддрддреНрд╡ рдХреЛ рдирд┐рдХрд╛рд▓рдирд╛ рдЖрд╕рд╛рди рд╣реИ - рдЖрдкрдХреЛ рдмрд╕ рддрддреНрд╡ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдФрд░ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рд╕реЗ рд▓рд┐рдВрдХ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╡рд░реНрдЧ рдХрд╛ рдХрдг
рдХреЛрдб
 class Particle { private static const GRAVITY:Point = new Point(0, 0.2); private var speed:Point; public var position:Point; public var color:int; public var next:Particle; public function Particle(x:Number, y:Number, color:int) { position= new Point(x, y); //    speed = new Point(); speed.x = Math.random() * 10 - 2; speed.y = Math.random() * 1 - 4; this.color = color; } public function Update():void { speed = speed.add(GRAVITY); pos = pos.add(speed); } } 


рдПрдиреАрдореЗрд╢рди рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдкреБрдирд░рд╛рд░рдВрдн рдмрдЯрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмрдЯрди рдореЗрдВ рджреЛ рд░рд╛рдЬреНрдп рд╣реИрдВ - рд╣реЙрд╡рд░ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдХреЗ рджреМрд░рд╛рди рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рдХреЛрдб
 class MiniButton extends Sprite { private var tf:TextField; public static const W:int = 100; public static const H:int = 24; public function MiniButton(text:String) { tf = new TextField(); var format:TextFormat = new TextFormat( "Arial" , 16 , 0x676767 , true , null, null, null, null , TextFormatAlign.CENTER); tf.defaultTextFormat = format; tf.mouseEnabled = false; tf.text = text; tf.width = W; tf.height = H; Redraw(0xB3F7B6); this.filters = [new GlowFilter(0xFFFFFF, 0.5, 14, 14, 3, 3)]; mouseChildren = false; buttonMode = true; addEventListener(MouseEvent.ROLL_OVER, HandleRollOver); addEventListener(MouseEvent.ROLL_OUT, HandleRollOut); } private function Redraw(color:int):void { graphics.clear(); graphics.beginFill(0xB3F7B6); graphics.drawRoundRect(0, 0, W, H, 16); graphics.endFill(); } private function HandleRollOut(e:MouseEvent):void { Redraw(0xB3F7B6); } private function HandleRollOver(e:MouseEvent):void { Redraw(0x37EC41); } } 


рдПрдиреАрдореЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЗред
рдХреЛрдб
 private function Reset():void { btnRestart.visible = false; txtMask.width = 4; isRunning = true; addEventListener(Event.ENTER_FRAME, HandleEnterFrame); } private function Stop():void { btnRestart.visible = true; isRunning = false; removeEventListener(Event.ENTER_FRAME, HandleEnterFrame); } 


рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рддреИрдпрд╛рд░ рд╣реИред рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ, InitializeLayout рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдПрдиреАрдореЗрд╢рди рд╢реБрд░реВ рдХрд░реЗрдВред
рдХреЛрдб
 public function Main() { InitalizeLayout(); Reset(); btnRestart.addEventListener(MouseEvent.CLICK, HandleResetClick); } 


рдпрд╣ рдореБрдЦреНрдп рдЪрдХреНрд░ рд╣реИ, рдЬреЛ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдереЛрдбрд╝рд╛ рдмреЛрдЭрд┐рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИред
рдХреЛрдб
 private var firstParticle:Particle; private function HandleEnterFrame(e:Event):void { if (!isRunning) return; //    screen.lock(); screen.fillRect(screen.rect, 0x00000000); // X    var currentX:int = (txtMask.x + txtMask.width) - textBmp.x; if (currentX >= 0 && currentX < textBmp.width) { //      var color:int; var alpha:int; while (currentY < txtMask.height) { //    color = textBdata.getPixel32(currentX, currentY); alpha = (color >> 24) & 0xFF; //    if (alpha > 0x7f) { //          alpha /= 1.4; color = alpha << 24 | (color & 0xFFFFFF); for (var i:int = 0; i < 8; ++i) { var pp:Particle = new Particle(txtMask.x + txtMask.width, txtMask.y + currentY + i, color); if (firstParticle == null) { firstParticle = pp; } else { pp.next = firstParticle; firstParticle = pp; } } currentY += 6; screen.copyPixels(head, head.rect, new Point( txtMask.x + txtMask.width , txtMask.y + currentY - head.height / 2 ) ); screen.applyFilter( screen , screen.rect , new Point() , new BlurFilter(2, 2) ); break; } currentY += 2; } } var p:Particle = firstParticle; var prev:Particle; while (p != null) { p.Update(); //         if (p.pos.x < 0 || p.pos.y < 0 || p.pos.x > W || p.pos.y > H) { //     if (prev == null) { p = p.next; firstParticle = p; continue; } else { prev.next = p.next; } } //    var clr:int = pc; screen.setPixel32(p.pos.x, p.pos.y, clr); screen.setPixel32(p.pos.x-1, p.pos.y, clr); screen.setPixel32(p.pos.x+1, p.pos.y, clr); screen.setPixel32(p.pos.x, p.pos.y-1, clr); screen.setPixel32(p.pos.x, p.pos.y + 1, clr); prev = p; p = p.next; } //   ""  screen.applyFilter(screen, screen.rect, new Point(), new GlowFilter(0xFFFF00, 0.8, 10, 10)); screen.applyFilter(screen, screen.rect, new Point(), new BlurFilter(2, 2)); screen.unlock(); if (currentY >= txtMask.height) { currentY = 0; txtMask.width += 2; } if (txtMask.width >= textBmp.width) { if (firstParticle == null) { Stop(); } } } 



рдкреБрдирд╢реНрдЪред рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреВрд░реНрдг рд╕реНрд░реЛрдд
рдХреЛрдб
 package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.BitmapDataChannel; import flash.display.BlendMode; import flash.display.Shape; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.events.MouseEvent; import flash.filters.BlurFilter; import flash.filters.GlowFilter; import flash.geom.ColorTransform; import flash.geom.Point; import flash.text.TextField; import flash.text.TextFormat; /** * ... * @author KeeReal */ public class Main extends Sprite { //- PRIVATE & PROTECTED VARIABLES ------------------------------------------------------------------------- private var textBdata:BitmapData; private var textBmp:Bitmap; private var screen:BitmapData; private var head:BitmapData; private var txtMask:Shape; private var firstParticle:Particle; private var btnRestart:MiniButton; private var isRunning:Boolean; private var currentY:int = 0; //- PUBLIC & INTERNAL VARIABLES --------------------------------------------------------------------------- public static const W:int = 460; public static const H:int = 240; //- CONSTRUCTOR ------------------------------------------------------------------------------------------- public function Main() { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP; InitalizeLayout(); Reset(); btnRestart.addEventListener(MouseEvent.CLICK, HandleResetClick); } //- PRIVATE & PROTECTED METHODS --------------------------------------------------------------------------- private function Reset():void { btnRestart.visible = false; txtMask.width = 4; isRunning = true; addEventListener(Event.ENTER_FRAME, HandleEnterFrame); } private function Stop():void { btnRestart.visible = true; isRunning = false; removeEventListener(Event.ENTER_FRAME, HandleEnterFrame); } private function InitalizeLayout():void { screen = new BitmapData(W, H, true, 0x00000000); addChild(new Bitmap(screen)); textBdata = GetMaskedText("..Hello habr.."); textBmp = new Bitmap(textBdata); textBmp.x = (W - textBmp.width) * 0.5; textBmp.y = (H - textBmp.height) * 0.5; addChild(textBmp); txtMask = new Shape(); txtMask.graphics.beginFill(0xFFFFFF); txtMask.graphics.drawRect(0, 0, 4, textBmp.height); txtMask.graphics.endFill(); txtMask.x = textBmp.x; txtMask.y = textBmp.y; textBmp.mask = txtMask; addChild(txtMask); btnRestart = new MiniButton("restart"); btnRestart.x = (W - MiniButton.W) * 0.5; btnRestart.y = 10.0; addChild(btnRestart); } private function GetMaskedText(text:String):BitmapData { var tf:TextField = new TextField(); var format:TextFormat = new TextFormat("Arial", 60, 0xFFFFFF, true); tf.defaultTextFormat = format; tf.text = text; tf.width = tf.textWidth + 4.0; tf.height = tf.textHeight + 4.0; tf.filters = [new GlowFilter(0xFFFFFF, 1.0, 2, 2, 4, 3)]; var w:int = tf.width; var h:int = tf.height; var noiseBdata:BitmapData = new BitmapData(w, h, true, 0xFFFFFFFF); var channels:int = BitmapDataChannel.GREEN | BitmapDataChannel.RED; noiseBdata.perlinNoise(w / 6, h / 4, 6, int(Math.random() * 1000), false, false, channels, false); noiseBdata.colorTransform(noiseBdata.rect, new ColorTransform(1.4, 1.4, 1.4)); var noiseBmp:Bitmap = new Bitmap(noiseBdata); var textBdata:BitmapData = new BitmapData(w, h, true, 0x00000000); textBdata.draw(tf); var textBmp:Bitmap = new Bitmap(textBdata); var eraseTextBdata:BitmapData = noiseBdata.clone(); eraseTextBdata.draw(noiseBmp); eraseTextBdata.draw(textBmp, null, null, BlendMode.ERASE); var eraseTextBmp:Bitmap = new Bitmap(eraseTextBdata); var eraseBackByTextBdata:BitmapData = noiseBdata.clone(); eraseBackByTextBdata.draw(eraseTextBmp, null, null, BlendMode.ERASE); eraseBackByTextBdata.applyFilter( eraseBackByTextBdata , eraseBackByTextBdata.rect , new Point() , new GlowFilter(0xFFFFFF, 1.0, 3, 3) ); noiseBdata.dispose(); textBdata.dispose(); eraseTextBdata.dispose(); head = new BitmapData(6, 6, true, 0xffFFFFFF); return eraseBackByTextBdata; } //- PUBLIC & INTERNAL METHODS ----------------------------------------------------------------------------- //- EVENT HANDLERS ---------------------------------------------------------------------------------------- private function HandleResetClick(e:MouseEvent):void { Reset(); } private function HandleEnterFrame(e:Event):void { if (!isRunning) return; screen.lock(); screen.fillRect(screen.rect, 0x00000000); var currentX:int = (txtMask.x + txtMask.width) - textBmp.x; if (currentX >= 0 && currentX < textBmp.width) { var color:int; var alpha:int; while (currentY < txtMask.height) { color = textBdata.getPixel32(currentX, currentY); alpha = (color >> 24) & 0xFF; if (alpha > 0x7f) { alpha /= 1.4; color = alpha << 24 | (color & 0xFFFFFF); for (var i:int = 0; i < 8; ++i) { var pp:Particle = new Particle(txtMask.x + txtMask.width, txtMask.y + currentY + i, color); if (firstParticle == null) { firstParticle = pp; } else { pp.next = firstParticle; firstParticle = pp; } } currentY += 6; screen.copyPixels(head, head.rect, new Point( txtMask.x + txtMask.width , txtMask.y + currentY - head.height / 2 ) ); screen.applyFilter( screen , screen.rect , new Point() , new BlurFilter(2, 2) ); break; } currentY += 2; } } var p:Particle = firstParticle; var prev:Particle; while (p != null) { p.Update(); if (p.position.x < 0 || p.position.y < 0 || p.position.x > W || p.position.y > Main.H) { if (prev == null) { p = p.next; firstParticle = p; continue; } else { prev.next = p.next; } } var clr:int = p.color; screen.setPixel32(p.position.x, p.position.y, clr); screen.setPixel32(p.position.x - 1, p.position.y, clr); screen.setPixel32(p.position.x + 1, p.position.y, clr); screen.setPixel32(p.position.x, p.position.y - 1, clr); screen.setPixel32(p.position.x, p.position.y + 1, clr); prev = p; p = p.next; } screen.applyFilter(screen, screen.rect, new Point(), new GlowFilter(0xFFFF00, 0.8, 10, 10)); screen.applyFilter(screen, screen.rect, new Point(), new BlurFilter(2, 2)); screen.unlock(); if (currentY >= txtMask.height) { currentY = 0; txtMask.width += 2; } if (txtMask.width >= textBmp.width) { if (firstParticle == null) { Stop(); } } } //- GETTERS & SETTERS ------------------------------------------------------------------------------------- //- HELPERS ----------------------------------------------------------------------------------------------- } } import flash.display.Sprite; import flash.events.MouseEvent; import flash.filters.GlowFilter; import flash.geom.Point; import flash.text.TextField; import flash.text.TextFormat; import flash.text.TextFormatAlign; class Particle { private static const GRAVITY:Point = new Point(0.0, 0.2); private var speed:Point; public var position:Point; public var color:int; public var next:Particle; public function Particle(x:Number, y:Number, color:int) { position = new Point(x, y); speed = new Point(); speed.x = Math.random() * 10 - 2; speed.y = Math.random() * 1 - 4; this.color = color; } public function Update():void { speed = speed.add(GRAVITY); position = position.add(speed); } } class MiniButton extends Sprite { private var tf:TextField; public static const W:int = 100; public static const H:int = 24; public function MiniButton(text:String) { tf = new TextField(); var format:TextFormat = new TextFormat( "Arial" , 16 , 0x676767 , true , null, null, null, null , TextFormatAlign.CENTER); tf.defaultTextFormat = format; tf.mouseEnabled = false; tf.text = text; tf.width = W; tf.height = H; Redraw(0xB3F7B6); this.filters = [new GlowFilter(0xFFFFFF, 0.5, 14, 14, 3, 3)]; mouseChildren = false; buttonMode = true; addEventListener(MouseEvent.ROLL_OVER, HandleRollOver); addEventListener(MouseEvent.ROLL_OUT, HandleRollOut); } private function Redraw(color:int):void { graphics.clear(); graphics.beginFill(0xB3F7B6); graphics.drawRoundRect(0, 0, W, H, 16); graphics.endFill(); } private function HandleRollOut(e:MouseEvent):void { Redraw(0xB3F7B6); } private function HandleRollOver(e:MouseEvent):void { Redraw(0x37EC41); } } 

Source: https://habr.com/ru/post/In186038/


All Articles