package {
import flash.display.Bitmap;
import flash.display.Shader;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.filters.ShaderFilter;
import flash.utils.Timer;
[SWF(width="550",height="400",backgroundColor="0x0",frameRate="24")]
public class PB04 extends Sprite{
[Embed(source="data/twitter_250.png")]
private var TestImage:Class;
[Embed(source="data/twirl.pbj", mimeType="application/octet-stream")]
private var PbjObject:Class;
private var img:Bitmap;
private var shader:Shader;
private var filter:ShaderFilter;
private var flgClick:Boolean;
public function PB04(){
img = new TestImage();
img.x = stage.stageWidth/2 - img.width/2;
img.y = stage.stageHeight/2 - img.height/2;
addChild(img);
var btn:Sprite = new Sprite();
btn.buttonMode = true;
btn.graphics.beginFill(0x0,0);
btn.graphics.drawRect(img.x,img.y,img.width,img.height);
btn.graphics.endFill();
addChild(btn);
shader = new Shader(new PbjObject());
shader.data["center"]["value"] = [125,125];
shader.data["radius"]["value"] = [80];
shader.data["twirlAngle"]["value"] = [0];
filter= new ShaderFilter(shader);
img.filters = [filter];
btn.addEventListener(MouseEvent.CLICK,onClick);
}
private function onClick(e:MouseEvent):void{
if (!flgClick){
const FREQENCY:int = 10;
const THETA_MAX:Number = Math.PI/2;
const AMPLITUDE:Number = 2*(Math.random()-0.5)*360;
var tick:Number = 0;
var timer:Timer = new Timer(20,FREQENCY);
timer.addEventListener(TimerEvent.TIMER,changeAngle);
timer.start();
flgClick = true;
}
function changeAngle(e:TimerEvent):void{
tick += THETA_MAX/FREQENCY;
shader.data["twirlAngle"]["value"] = [AMPLITUDE*Math.cos(tick)];
img.filters = [filter];
e.updateAfterEvent();
if (tick >= THETA_MAX){
flgClick = false;
}
}
}
}
}
Powered by blog Boreal Kiss 2008.