LANGUAGE TRANSLATION

12 AEMN


NHÀ MÌNH ONLINE !

Tiến Quốc
Tố Uyên
Thuý Hằng
Linh Sương
Vũ Mai
Nguyễn Duyên
Chi Uyên
Minh Anh
Châu Tuấn
Thành Nhân
Chí Thành
Đức Thiệu

QT của thầy Văn Ngãi

danh mục nội dung web mmtt

Thống kê

  • truy cập   (chi tiết)
    trong hôm nay
  • lượt xem
    trong hôm nay
  • thành viên
  • GD

    XIN KÍNH CHÀO

    4 khách và 0 thành viên

    111

    Gốc > TRI THỨC CUỘC SỐNG - CHIA SẺ KINH NGHIỆM > Học Flash >

    Hiệu ứng lửa trong Flash AS3

     

    Chào các bạn hôm nay mình xin giới thiệu các bạn cách làm hiệu ứng lửa trong Flash AS3 rất đơn giản.

    Bài này tương tự như bài làm thác nước: http://aloflash.com/thuc-hanh-flash/hieu-ung/558-lam-thac-nuoc-trong-flash.html nên các bạn hãy làm theo các bước như ở bài Thác Nước nhé.

    Khác với bài tập thác nước bạn hãy chèn đoạn code này như ở bước 3 của bài thác nước nhé:

     //aloflash.com
    import com.flashandmath.dg.GUI.ScrollingPerlinNoise;
    import flash.events.Event;
    import flash.display.BitmapData;
    import flash.display.Bitmap;
    import flash.filters.DisplacementMapFilter;
    import flash.geom.Point;
    import flash.geom.ColorTransform;
    import flash.display.BitmapDataChannel;
    import flash.filters.DisplacementMapFilterMode;
    import flash.filters.ColorMatrixFilter;
    import flash.geom.Matrix;
    import flash.filters.BlurFilter;
    import flash.display.BlendMode;
    import flash.display.Shape;
    import flash.geom.Rectangle;

    var posX:Number;
    var posY:Number;
    var displayWidth:Number;
    var displayHeight:Number;
    var clouds:ScrollingPerlinNoise;
    var clouds2:ScrollingPerlinNoise;
    var dmfClouds:ScrollingPerlinNoise;
    var displayBitmapData:BitmapData;
    var displayBitmap:Bitmap;
    var dmfSource:BitmapData;
    var shapeGrad:Shape;
    var dmf:DisplacementMapFilter;
    var cmf:ColorMatrixFilter;
    var origin:Point;
    var preBlur:BlurFilter;
    var postBlur:BlurFilter;

    stage.scaleMode = StageScaleMode.NO_SCALE;

    init();

    //Tọa độ bắt đầu và chiều rộng chiều cao của khu lửa
    function init():void {
        posX = 10; //Tọa độ bắt đầu khu lửa X
        posY = 10; //Tọa độ bắt đầu khu lửa Y
        displayWidth = 450; //Chiều rộng khu lửa
        displayHeight = 320; //Chiều cao khu lửa
    //Kết thúc     
        displayBitmapData = new BitmapData(displayWidth,displayHeight,true,0x00000000);
        displayBitmap = new Bitmap(displayBitmapData);
        displayBitmap.x = posX;
        displayBitmap.y = posY;
        this.addChild(displayBitmap);
        
        origin = new Point(0,0); //Được sử dụng trong bộ lọc. Nên để mặc định là 0,0

        clouds = new ScrollingPerlinNoise(displayWidth,displayHeight, 1, -5, true, 0x000000, 5, 30,150,true); //Màu viền xung quanh lửa 0x00000 là màu đen bạn có thể thay = màu khác
        clouds2 = new ScrollingPerlinNoise(displayWidth,displayHeight, -1, -6, true, 0x000000, 5, 40,100,true); //Màu viền xung quanh lửa 0x00000 là màu đen bạn có thể thay = màu khác
        //Độ tương phản của những khói xung quanh lửa:
        var contrast:ColorMatrixFilter = new ColorMatrixFilter([4,0,0,0,-400,
                                                                4,0,0,0,-400,
                                                                 4,0,0,0,-400,
                                                                0,0,0,1,0]);
        
        clouds.cloudsBitmapData.applyFilter(clouds.cloudsBitmapData,clouds.cloudsBitmapData.rect,origin,contrast);
        clouds2.cloudsBitmapData.applyFilter(clouds2.cloudsBitmapData,clouds2.cloudsBitmapData.rect,origin,contrast);
        
        //Sự dịch chuyển ngẫu nhiên của lửa.
        dmfClouds = new ScrollingPerlinNoise(displayWidth,displayHeight, 3, -14, true,0x800000, 5, 120,200,false);
        
        dmfSource = new BitmapData(displayWidth,displayHeight,false,0x000000);
        
        //Viền của khu lửa
        shapeGrad = new Shape();
        var mat:Matrix = new Matrix();
        var gw:Number = displayWidth;
        var gh:Number = 2*displayHeight;
        mat.createGradientBox(gw,gh,0,0.5*(displayWidth - gw),0);
        shapeGrad.graphics.beginGradientFill("radial",[0xFFFFFF,0],[0,1],[0,255],mat);
        shapeGrad.graphics.drawRect(0,0,displayWidth,displayHeight);
        shapeGrad.graphics.endFill();                    
        dmfSource.draw(shapeGrad);
        
        var frame:Shape = new Shape();
        frame.graphics.lineStyle(1,0x222222); //Độ dầy viền của khu lửa và màu của viền tương đương 1 và 0x222222, nếu bạn không muốn có viền thay 1 = 0
        frame.graphics.drawRect(0,0,displayWidth,displayHeight);
        frame.x = posX;
        frame.y = posY;
        this.addChild(frame);
        
        preBlur = new BlurFilter(3,10);
        postBlur = new BlurFilter(2,2);
        dmf = new DisplacementMapFilter(dmfSource, new Point(), BitmapDataChannel.RED, BitmapDataChannel.BLUE, 120, 500, DisplacementMapFilterMode.COLOR,0x000000,0);
        
        var a:Number = 16;
        var d:Number = -1024;
        cmf = new ColorMatrixFilter([a*1,0,0,0,d,
                                     a*0.6,0,0,0,d,
                                     a*0.4,0,0,0,d,
                                     2.4,0,0,0,0]);
        
        clouds.startScroll();
        clouds2.startScroll();
        dmfClouds.startScroll();
        
        this.addEventListener(Event.ENTER_FRAME, onEnter);
    }

    function onEnter(evt:Event):void {
        var rect:Rectangle = new Rectangle(0,0,displayWidth, displayHeight);
        
        dmfSource.draw(dmfClouds);    
        
        displayBitmapData.lock();
        
        displayBitmapData.draw(clouds);
        displayBitmapData.draw(clouds2,null,null,BlendMode.ADD);
        displayBitmapData.draw(shapeGrad);
        
        displayBitmapData.applyFilter(displayBitmapData, rect, origin, cmf);
        displayBitmapData.applyFilter(displayBitmapData, rect, origin, preBlur);
        displayBitmapData.applyFilter(displayBitmapData, rect, origin, dmf);
        displayBitmapData.applyFilter(displayBitmapData, rect, origin, postBlur);
        
        displayBitmapData.unlock();    
    }

    Và chúng ta Download file này về máy (com_hieu_ung_lua.rar).

    Và khi Lưu file chúng ta cũng lưu cùng với thư mục com như trong bài thác nước

    Có thắc mắc gì các bạn để lại Comment nhé.

    Chúc mọi người vui vẻ và thành công !


    Nhắn tin cho tác giả
    Thanh Y @ 15:56 23/11/2012
    Số lượt xem: 821
    Số lượt thích: 0 người
     
    Gửi ý kiến