Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   опять Ripple ) (http://www.flasher.ru/forum/showthread.php?t=132982)

tananuka 24.11.2009 19:48

опять Ripple )
 
Вложений: 1
Решил переписать на ас3 вот ето http://www.silin.su/#AS2/ripple
но чото не работает))) Помогите люди добрые и умные...
приложил исходник етого тестового проекта из 2 классов:
Код AS3:

package
{
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
 
        [SWF( backgroundColor='0x121212', frameRate='35', width='256', height='256')]
 
        public class Main extends Sprite
        {
                [Embed(source='pattern.gif' )] private const Pattern: Class;
                public var ripple:Ripple;
 
                public function Main()
                {
                        graphics.beginBitmapFill( Bitmap( new Pattern() ).bitmapData );
                        graphics.drawRect( 0, 0, 256, 256 );
                        graphics.endFill();
                        ripple = new Ripple(500, 500);
                        this.addEventListener(MouseEvent.MOUSE_MOVE, mouseMove)
                        this.addEventListener(Event.ENTER_FRAME, onEnterFrame)
                }
                private function mouseMove (_e:MouseEvent):void
                {
                        ripple.wobbleXY(this.mouseX, this.mouseY, 1);
                }
                private function onEnterFrame(_e:Event):void
                {
                        //пересчитываем карту смещений в Ripple
                        ripple.render();
                        //применяем фильтр
                        this.filters = [ripple.filter];
                }
        }       
}

Код AS3:

package
{
        import flash.display.BitmapData;
        import flash.display.BlendMode;
        import flash.filters.ConvolutionFilter;
        import flash.filters.DisplacementMapFilter;
        import flash.filters.DisplacementMapFilterMode;
        import flash.geom.ColorTransform;
        import flash.geom.Matrix;
        import flash.geom.Point;
        import flash.geom.Rectangle;
 
        public class Ripple
        {
                private var _filter:DisplacementMapFilter;
 
                private var mapBMP: BitmapData;
                private var resBMP : BitmapData;
 
                private var bufBMP : BitmapData;
                private var mtrx1 : Matrix;
                private var mtrx2 : Matrix;
                private var wave : ConvolutionFilter;
                private var damp : ColorTransform;
 
                private var width:Number;
                private var height:Number;
 
                private var quartRect:Rectangle;
 
                public function Ripple(w:Number, h:Number)
                {
                        width = w;
                        height = h;
                        quartRect = new Rectangle(0, 0, width/2,height/2);
                        mtrx1 = new Matrix();
                        mtrx2 = new Matrix(2, 0, 0, 2);
 
                        mapBMP = new BitmapData(width, height, false, 128);
                        resBMP = new BitmapData(width, height, false, 128);
                        bufBMP = new BitmapData(width, height, false, 128);
 
                        wave = new ConvolutionFilter(3, 3, [1, 1, 1, 1, 1, 1, 1, 1, 1], 9, 0);
                        damp = new ColorTransform(0, 0, 0.99609374, 1, 0, 0, 2, 0);
 
                        _filter = new DisplacementMapFilter (new BitmapData(width, height, false, 128), new Point(), 4, 4, 32, 32, DisplacementMapFilterMode.IGNORE);
 
                }
 
                public function render():void
                {
                        resBMP.applyFilter (mapBMP, quartRect, new Point(), wave);
                        resBMP.draw(resBMP,mtrx1,null, BlendMode.ADD);
                        resBMP.draw (bufBMP, mtrx1, null, BlendMode.DIFFERENCE);
                        resBMP.draw (resBMP, mtrx1, damp);
 
                        _filter.mapBitmap.draw(resBMP, mtrx2, null, null, null, true);
                        bufBMP = mapBMP;
                        mapBMP = resBMP.clone();
                }
 
                public function clear():void
                {
 
                        resBMP = new BitmapData (width, height, false, 128);
                        mapBMP = new BitmapData (width, height, false, 128);
                        bufBMP = new BitmapData (width, height, false, 128);
                        wave = new ConvolutionFilter (3, 3, [1, 1, 1, 1, 1, 1, 1, 1, 1] , 9, 0);
                        damp = new ColorTransform (0, 0, 0.99609374, 1, 0, 0, 2, 0);
 
                        _filter.mapBitmap = new BitmapData(width, height, false, 128);
 
                }
 
                public function wobbleXY (x : Number, y : Number, d:Number):void
                {
                        if (!d) d = 1;
                        var dx:Number = Math.round(x / 2);
                        var dy:Number = Math.round(y / 2);
 
                        mapBMP.setPixel (dx + d, dy, 0xFFFFFF);
                        mapBMP.setPixel (dx - d, dy, 0xFFFFFF);
                        mapBMP.setPixel (dx, dy + d, 0xFFFFFF);
                        mapBMP.setPixel (dx, dy - d, 0xFFFFFF);
                        mapBMP.setPixel (dx, dy, 0xFFFFFF);
                }
 
                public function wobble (n : Number):void
                {
                        if (!n) n = 32;
                        for (var i:Number = 0; i < n; i++) {
                                wobbleXY (width*Math.random() , height*Math.random(), 1);
                        }
                }
 
                public function get filter():DisplacementMapFilter { return _filter; }
 
        }
}


udaaff 24.11.2009 20:10

http://www.silin.su/#AS3/filters/ripple

tananuka 24.11.2009 20:10

ой не успел порыться потому сайту, там есть и на ас3...
плиз удалите тему ....


Часовой пояс GMT +4, время: 07:42.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.