Показать сообщение отдельно
Старый 24.01.2012, 04:09
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 3  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: 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);
        }
 
    }
 
}
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 24.01.2012 в 04:19.