flash on 2010-12-20
♥0 |
Line 166 |
Modified 2011-02-04 17:09:55 |
MIT License
archived:2017-03-10 06:15:57
ActionScript3 source code
/**
* Copyright noli ( http://wonderfl.net/user/noli )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/wyuq
*/
package
{
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.display.Sprite;
import flash.display.Stage;
import flash.display.StageScaleMode;
import flash.display.StageAlign;
import flash.display.StageQuality;
import flash.geom.ColorTransform;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.geom.Point;
[SWF(frameRate="60")]
public class mouseStarDust extends Sprite
{
public var displayData:BitmapData;
public var empty:BitmapData;
public var color:ColorTransform = new ColorTransform(1, 1, 1, 1, -3, -6, -3, 0);
public var baseBmp:Bitmap;
public const partNum:int = 100;
public var totalRect:int = 0;
public var mouseToggle:int = 0;
public var first:num;
public var last:num;
public var cont:num;
public var temp:num
public function mouseStarDust()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.quality = StageQuality.LOW;
displayData = new BitmapData(stage.stageWidth >> 0, stage.stageHeight >> 0, false, 0x000000);
baseBmp = new Bitmap(displayData);
this.addChildAt(baseBmp, 0);
stage.addEventListener(Event.RESIZE, reSize);
stage.addEventListener(MouseEvent.MOUSE_MOVE, burstRect);
stage.addEventListener(MouseEvent.CLICK, switchToggle);
this.addEventListener(Event.ENTER_FRAME , upDate);
function switchToggle(event:MouseEvent):void
{
mouseToggle = 1 - mouseToggle;
temp = first;
while(temp)
{
if(mouseToggle)
{
temp.dx = 0;
temp.dy = 0;
temp.springX = Math.random() * 0.001 + 0.001;
temp.springY = Math.random() * 0.001 + 0.001;
}
else
{
temp.dx = Math.random() * -6 + 3;
temp.dy = Math.random() * -6 + 3;
}
temp = temp.next;
}
}
function reSize(event:Event):void
{
displayData.lock();
empty = displayData.clone();
displayData = new BitmapData(stage.stageWidth, stage.stageHeight, false, 0x000000);
displayData.copyPixels(empty, empty.rect, new Point());
displayData.unlock();
}
function burstRect(event:MouseEvent):void
{
for (var i:int = 0; i < partNum; i++ )
{
var temp:num = new num();
temp._x = mouseX;
temp._y = mouseY;
temp.springX = Math.random() * 0.001 + 0.001;
temp.springY = Math.random() * 0.001 + 0.001;
if (mouseToggle)
{
temp.dx = temp.dy = 0;
}
else
{
temp.dx = Math.random() * -6 + 3;
temp.dy = Math.random() * -6 + 3;
}
if (first == null)
{
last = first = temp;
}
else
{
temp.prev = last;
last.next = temp;
last = temp;
}
}
}
function upDate(event:Event):void
{
cont = first;
displayData.lock();
displayData = displayData.clone();
while (cont)
{
if(mouseToggle)
{
cont.dx += (mouseX - cont._x) * cont.springX;
cont.dy += (mouseY - cont._y) * cont.springY;
cont._x += cont.dx;
cont._y += cont.dy;
}
else
{
cont._x += cont.dx;
cont._y += cont.dy;
}
if((cont._x > stage.stageWidth) || (cont._x < 0) || (cont._y > stage.stageHeight) || (cont._y < 0))
{
if(!cont.prev)
{
if(!cont.next)
{
first = null;
}
else
{
cont.next.prev = null;
first = cont.next;
}
}
else if(!cont.next)
{
cont.prev.next = null
}
else
{
cont.next.prev = cont.prev;
cont.prev.next = cont.next;
}
}
displayData.setPixel(cont._x, cont._y, 0x00bbff);
if(!cont.next)
{
last = cont;
}
cont = cont.next;
}//while
displayData.colorTransform(displayData.rect, color);
baseBmp.bitmapData = displayData;
displayData.unlock();
}
}
}
}
final class num
{
public var _x:Number;
public var _y:Number;
public var dx:Number;
public var dy:Number;
public var springX:Number;
public var springY:Number;
public var next:num;
public var prev:num;
}