|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Как-то тоже баловался
Canvas.as
 Код AS3:
package
{
import flash.display.DisplayObject;
import flash.display.Graphics;
import flash.display.MovieClip;
import flash.display.Shape;
import flash.display.Sprite;
/* * * * * * * * * *
* *
* @author wolsh *
* *
\* * * * * * * * * */
public class Canvas
{
private var g:Graphics;
private var _fromX:Number;
private var _fromY:Number;
// fill settings
private var _fill:Boolean;
private var _fillC:uint;
private var _fillA:Number;
// border settings
private var _border:Boolean;
private var _borderT:Number;
private var _borderC:uint;
private var _borderA:Number;
public function Canvas(target:DisplayObject)
{
if(target is Sprite) g = (target as Sprite).graphics;
else if(target is Shape) g = (target as Shape).graphics;
else if(target is MovieClip) g = (target as MovieClip).graphics;
else throw new Error("Объект назначения не поддерживает программное рисование");
}
public function line(thick:Number = 0, color:uint = 0x000000, alpha:Number = 1):Canvas
{
g.lineStyle(thick, color, alpha);
return this;
}
public function fill(color:uint = 0x000000, alpha:Number = 1):Canvas
{
_fill = true;
_fillC = color;
_fillA = alpha;
g.beginFill(color, alpha);
return this;
}
public function rect(x:Number, y:Number, width:Number, height:Number):Canvas
{
if (_border)
{
g.beginFill(_borderC, _borderA);
g.drawRect(x, y, width, height);
g.drawRect(x + _borderT, y + _borderT, width - _borderT * 2, height - _borderT * 2);
}
if (_fill)
{
g.endFill();
g.beginFill(_fillC, _fillA);
if (_border)
{
g.drawRect(x + _borderT, y + _borderT, width - _borderT * 2, height - _borderT * 2);
}
else
{
g.drawRect(x, y, width, height);
}
}
end();
return this;
}
public function border(thick:Number = 0, color:uint = 0x000000, alpha:Number = 1):Canvas
{
_borderT = thick;
_borderC = color;
_borderA = alpha;
_border = true;
return this;
}
public function from(x:Number = 0, y:Number = 0):Canvas
{
g.moveTo(x, y);
_fromX = x;
_fromY = y;
return this;
}
public function to(x:Number = 0, y:Number = 0):Canvas
{
g.lineTo(x, y);
return this;
}
/* Замыкает контур */
public function close():Canvas
{
g.lineTo(_fromX, _fromY);
g.lineStyle();
return this;
}
/* Очищает все установки */
public function end():void
{
g.endFill();
g.lineStyle();
_border = _fill = false;
_fromX = _fromY = _borderT = 0;
}
}
}
Main.as
 Код AS3:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import Canvas;
/* * * * * * * * * *
* *
* @author wolsh *
* *
\* * * * * * * * * */
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
// entry point
var canvas:Canvas = new Canvas(this);
canvas.line(1, 0x222222, 1).from(10, 10).to(60, 20).to(110, 10).to(110, 50).to(10, 50).close();
canvas.fill(0x666666, 0.8).from(120, 10).to(220, 10).to(220, 50).to(120, 50).end();
canvas.fill(0xFF6666, 0.8).rect(120, 60, 100, 40);
canvas.border(4, 0xFF6666, 0.8).rect(10, 60, 100, 40);
canvas.border(4, 0x222222, 0.8).fill(0xFF6600, 0.8).rect(10, 110, 100, 40);
}
}
}
Последний раз редактировалось Wolsh; 24.01.2012 в 04:19.
|