package com.nkknight.chapter1
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.BlendMode;
import flash.display.GradientType;
import flash.display.Shader;
import flash.display.Shape;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.filters.GradientBevelFilter;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.geom.Rectangle;
[SWF(backgroundColor="0x000000", width="1024", height="768", frameRate="24")]
public class DrawGrandientFill2 extends Sprite
{
private var colors:Array = [0xffffff,0x888888,0x000000];
private var alphas:Array = [1,1,1];
private var ratios:Array = [0,127,255];
private var left:Shape;
private var top:Shape;
private var right:Shape;
private var bottom:Shape;
private var sprite:Sprite;
private var bitmap:BitmapData;
private var oneM:Matrix;
private var tM:Matrix;
private var tM2:Matrix;
private var itemWidth:Number = 200;
private var itemHeight:Number = 50;
public function DrawGrandientFill2()
{
super();
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
init();
}
private function init():void
{
bitmap = new BitmapData(itemWidth * 2, itemWidth * 2, false, 0x000000);
oneM = new Matrix();
oneM.rotate(Math.PI / 180);
tM = new Matrix();
tM.translate(itemWidth, itemWidth);
tM2 = new Matrix();
tM2.translate( - itemWidth, -itemWidth);
render();
sprite = new Sprite();
sprite.graphics.beginBitmapFill(bitmap, tM2, true);
sprite.graphics.drawRect( - itemWidth, -itemWidth, itemWidth*2, itemWidth*2);
sprite.x = 300;
sprite.y = 300;
addChild(sprite);
this.addEventListener(Event.ENTER_FRAME, onEnter);
}
private function onEnter(evt:Event):void
{
sprite.rotation += 5;
sprite.x = stage.mouseX;
sprite.y = stage.mouseY;
}
private function render():void
{
drawLeft();
drawTop();
drawRight();
drawBottom();
}
private function drawLeft():void
{
left = new Shape();
var temp:Matrix = new Matrix();
temp.createGradientBox(itemWidth, itemHeight, 0, -itemWidth, -itemHeight /2);
left.graphics.beginGradientFill(GradientType.RADIAL, colors, alphas, ratios, temp, "pad", "rgb", 1);
left.graphics.drawRect(-itemWidth, -itemHeight / 2, itemWidth, itemHeight);
bitmap.draw(left, tM, null, BlendMode.ADD, null, false);
left.graphics.endFill();
left = null;
}
private function drawTop():void
{
top = new Shape();
var temp:Matrix = new Matrix();
temp.createGradientBox(itemHeight, itemWidth, Math.PI / 2, -itemHeight / 2, -itemWidth);
top.graphics.beginGradientFill(GradientType.RADIAL, colors, alphas, ratios, temp, "pad", "rgb", 1);
top.graphics.drawRect( -itemHeight / 2, - itemWidth, itemHeight, itemWidth);
bitmap.draw(top, tM, null, BlendMode.ADD, null, false);
top.graphics.endFill();
top = null;
}
private function drawRight():void
{
right = new Shape();
var temp:Matrix = new Matrix();
temp.createGradientBox(itemWidth, itemHeight, 0, 0, - itemHeight /2);
right.graphics.beginGradientFill(GradientType.RADIAL, colors, alphas, ratios, temp, "pad", "rgb", -1);
right.graphics.drawRect(0, -itemHeight / 2, itemWidth, itemHeight);
bitmap.draw(right, tM, null, BlendMode.ADD, null, false);
right.graphics.endFill();
right = null;
}
private function drawBottom():void
{
bottom = new Shape();
var temp:Matrix = new Matrix();
temp.createGradientBox(itemHeight, itemWidth, Math.PI / 2, -itemHeight / 2, 0);
bottom.graphics.beginGradientFill(GradientType.RADIAL, colors, alphas, ratios, temp, "pad", "rgb", -1);
bottom.graphics.drawRect( - itemHeight / 2, 0, itemHeight,itemWidth);
bitmap.draw(bottom, tM, null, BlendMode.ADD, null, false);
bottom.graphics.endFill();
bottom = null;
}
}
}
?
?