A Flash Developer Resource Site

Results 1 to 2 of 2

Thread: Senocular's Directional Motion Blur

  1. #1
    Junior Member
    Join Date
    Apr 2006
    Posts
    20

    Question Senocular's Directional Motion Blur

    I'm building banners in AS2 and I've tried to customize Senocular's very handy directional motion blur.

    The problem I'm having is I can't make this code reusable- I want to use it in a more linear fashion for banners rather then dynamically with mouse clicks. Has anyone had any luck using this in a timeline? Thanks!

    This is my attempt to customize at the moment (old_loc is coming up as undefined, which in turn makes new_loc NaN):
    PHP Code:
    import flash.geom.*;
    import flash.display.BitmapData;
    import flash.filters.BlurFilter;

    Stage.scaleMode 'noScale';

    var 
    maxBlur:Number 40;// maximum blur amount for motion blurring
    var easeAmount:Number .75;// amount of easing to be used for movement (0-1)
    var maxSize:Number;
    var 
    offset:Number;
    var 
    blur_bmp:BitmapData;
    var 
    rotate_matrix:Matrix = new Matrix();
    var 
    blur_rect:Rectangle = new Rectangle();
    var 
    blur_point:Point;
    var 
    blur_filter:BlurFilter;
    var 
    target_loc:Point;
    var 
    blurred_mc:MovieClip;

    function 
    motionBlur(mc:MovieClipxPosyPos):Void
    {
        
    //mc._visible = false;
        
    maxSize maxBlur Math.sqrt(mc._width mc._width mc._height mc._height);
        
    trace("maxSize = " maxSize);
        
    offset maxSize 2;
        
    trace("offset = " offset);
        
    blur_bmp = new BitmapData(maxSizemaxSizetrue0);
        
    this.createEmptyMovieClip("blurred_mc",1);
        
    blurred_mc.createEmptyMovieClip("image",1);
        
    blurred_mc.image.attachBitmap(blur_bmp,1,false,true);
        
    blurred_mc.image._x = -offset;
        
    blurred_mc.image._y = -offset;
        
    blur_rect blur_bmp.rectangle;// rectangle area filter affects
        
    blur_point = new Point(00);// offset point for filter
        
    blur_filter = new BlurFilter(00);// filter (blur, starting with no power)
        //http://flash-creations.com/notes/actionscript_eventhandlers.php
        
    this.onEnterFrame moveIt(mc);
        
    target_loc = new Point(xPosyPos);
    }

    function 
    moveIt(mc:MovieClip) {
        
    // get old (current) location of blurred_mc
        
    var old_loc = new Point(blurred_mc._xblurred_mc._y);
        
    trace("old_loc : " old_loc);
        
    // develop a new location for blurred_mc with interpolate
        
    var new_loc Point.interpolate(old_loctarget_loceaseAmount);
        
    trace("new_loc : " new_loc);
        
    // assign the new_loc to the position of blurred_mc
        
    blurred_mc._x new_loc.x;
        
    blurred_mc._y new_loc.y;
        
    // get the distance from the old loc to the new
        // this will be used to determine how much blur to apply
        
    var distance Point.distance(old_locnew_loc);
        
    // get the angle from the old loc to the new
        // this will be used to determine the angle of the blur
        
    var angle PointAngle(old_locnew_loc);
        
    // reset the rotate_matrix to remove any transformations
        // that were applied last frame
        
    rotate_matrix.identity();
        
    // rotate the matrix opposite of the angle found between
        // the new and old locations of blurred_mc
        
    rotate_matrix.rotate(-angle);
        
    // move the matrix by the offset to account for the
        // centered position of the original click_mc
        
    rotate_matrix.translate(offset,offset);
        
    // clear blur_bmp by filling it with empty pixels
        
    blur_bmp.fillRect(blur_bmp.rectangle,0);
        
    // draw the rotated, translated click_mc into blur_bmp
        
    blur_bmp.draw(mc,rotate_matrix);
        
    // apply the blur power to the blur filter
        
    blur_filter.blurX Math.min(maxBlurdistance 1.5);
        
    // apply the blur filter to the blur_bmp
        
    blur_bmp.applyFilter(blur_bmp,blur_rect,blur_point,blur_filter);
        
    // rotate blurred_mc to counteract the rotation of 
        // rotate_matrix used in draw
        
    blurred_mc._rotation angle 180 Math.PI;
    }

    button_mc.onMouseDown = function():Void
    {
        
    motionBlur(click_mcclick_mc._x+=20click_mc._y+=20);
        
    trace("CLICK MC X: " click_mc._x);    
        
    trace("CLICK MC Y: " click_mc._y);    
    }
    // PointAngle: returns the angle between two points
    function PointAngle(pt1:Pointpt2:Point):Number
    {
        var 
    dx pt2.pt1.x;
        var 
    dy pt2.pt1.y;
        return 
    Math.atan2(dydx);


  2. #2
    :
    Join Date
    Dec 2002
    Posts
    3,518
    Making the following changes will give values for old_loc and new_loc.
    Code:
    function motionBlur(mc:MovieClip, xPos, yPos):Void {
    	//mc._visible = false; 
    	maxSize = maxBlur+Math.sqrt(mc._width*mc._width+mc._height*mc._height);
    	trace("maxSize = "+maxSize);
    	offset = maxSize/2;
    	trace("offset = "+offset);
    	blur_bmp = new BitmapData(maxSize, maxSize, true, 0);
    	blurred_mc = this.createEmptyMovieClip("blurred_mc", 1);
    	blurred_mc.createEmptyMovieClip("image",1);
    	blurred_mc.image.attachBitmap(blur_bmp,1,false,true);
    	blurred_mc.image._x = -offset;
    	blurred_mc.image._y = -offset;
    	blur_rect = blur_bmp.rectangle;// rectangle area filter affects 
    	blur_point = new Point(0, 0);// offset point for filter 
    	blur_filter = new BlurFilter(0, 0);// filter (blur, starting with no power) 
    	// order was wrong
    	target_loc = new Point(xPos, yPos);
    	this.onEnterFrame = moveIt(mc);
    }

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  




Click Here to Expand Forum to Full Width

HTML5 Development Center