Рисуем фигуры. Прямоугольник
Возможности программного рисования в ActionScript 3 очень богаты, но есть один недостаток - нельзя в режиме реального времени управлять рисунком. Решить данную проблему можно следующим способом. Я написал класс который создает прямоугольник, и тут же ним можно управлять как вам хочется.
UPDATE Добавил возможность опционально использовать stage.invalidate(). Если вам это нужно, то поставьте render=true, и тогда вызовите stage.invalidate().
package { import flash.display.Graphics; import flash.display.Shape; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; /** * ... * @Wolf * http://vk.com/id62810564 * http://vk.com/as3flashdev */ public class Rect { private var sprite:Sprite = new Sprite(); private var lineStyle:Object = new Object(); private var fillStyle:Object = new Object(); private var _w:int; private var _h:int; public var draggable:Boolean = true; private var _render:Boolean = false; public function Rect(add:Function, x:int, y:int, w:int, h:int) { _w = w; _h = h; lineStyle.thickness = null; lineStyle.color = 0; lineStyle.alpha = 1; lineStyle.pixelHinting = false; lineStyle.scaleMode = "normal"; lineStyle.caps = null; lineStyle.joints = null; lineStyle.miterLimit = 3; fillStyle.color = 0x000000; fillStyle.alpha = 1; draw(); sprite.x = x; sprite.y = y; add(sprite); sprite.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); sprite.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); } private function renderListen(event:Event):void { trace("renderHandler: " + event); draw(); } private function onMouseDown(e:MouseEvent):void { if(draggable==true) sprite.startDrag(); } private function onMouseUp(e:MouseEvent):void { sprite.stopDrag(); } private function draw():void { sprite.graphics.clear(); sprite.graphics.lineStyle(lineStyle.thickness, lineStyle.color,lineStyle.alpha,lineStyle.pixelHinting,lineStyle.scaleMode,lineStyle.caps,lineStyle.joints,lineStyle.miterLimit); sprite.graphics.beginFill(fillStyle.color, fillStyle.alpha); sprite.graphics.drawRect(0, 0, this._w, this._h); sprite.graphics.endFill(); trace("draw"); } public function set width(w:int):void { this._w = w; if(!render) draw(); } public function get width():int { return this._w; } public function set height(h:int):void { this._h = h; if(!render) draw(); } public function get height():int { return this._h; } public function set line_thick(thick:Number):void { lineStyle.thickness = thick; if(!render) draw(); } public function get line_thick():Number { return lineStyle.thickness; } public function set line_color(color:uint):void { lineStyle.color = color; if(!render) draw(); } public function get line_color():uint { return lineStyle.color; } public function set line_alpha(alpha:Number):void { lineStyle.alpha = alpha; if(!render) draw(); } public function get line_alpha():Number { return lineStyle.alpha; } public function set line_pixelHinting(pixelHinting:Boolean):void { lineStyle.pixelHinting = pixelHinting; if(!render) draw(); } public function get line_pixelHinting():Boolean { return lineStyle.pixelHinting; } public function set line_scaleMode(scaleMode:String):void { lineStyle.scaleMode = scaleMode; if(!render) draw(); } public function get line_scaleMode():String { return lineStyle.scaleMode; } public function set line_caps(caps:String):void { lineStyle.caps = caps; if(!render) draw(); } public function get line_caps():String { return lineStyle.caps; } public function set line_joints(joints:String):void { lineStyle.joints = joints; if(!render) draw(); } public function get line_joints():String { return lineStyle.joints; } public function set line_miterLimit(miterLimit:Number):void { lineStyle.miterLimit = miterLimit; if(!render) draw(); } public function get line_miterLimit():Number { return lineStyle.miterLimit; } public function set fill_color(color:uint):void { fillStyle.color = color; //trace("fill"); if(!render) draw(); } public function get fill_color():uint { return fillStyle.color; } public function set fill_alpha(alpha:Number):void { fillStyle.alpha = alpha; if(!render) draw(); } public function get fill_alpha():Number { return fillStyle.alpha; } public function get render():Boolean { return _render; } public function set render(render:Boolean):void { _render = render; if (render) sprite.addEventListener(Event.RENDER, renderListen); else sprite.removeEventListener(Event.RENDER, renderListen); } } }
Всего комментариев 11
Комментарии
22.07.2012 10:34 | |
Цитата:
нельзя в режиме реального времени управлять рисунком
|
22.07.2012 11:18 | |
iNils, спасибо, буду иметь в виду.
|
22.07.2012 16:57 | |
А в чем смысл сего класса? В чем его преимущество над прямыми вызовами методов Graphics?
И присоединяюсь к Aquahawk. Как это? |
22.07.2012 17:22 | |
22.07.2012 19:01 | |
Цитата:
Сообщение от КорДум
И присоединяюсь к Aquahawk. Как это?
|
|
Обновил(-а) samana 22.07.2012 в 21:49
|
22.07.2012 21:24 | |
samana, именно так
|
23.07.2012 05:42 | |
drawRect использую чаще всех графических методов.
|
23.07.2012 22:10 | |
Чутка подправлю тезис.
Возможности программного рисования в ActionScript 3 не очень богаты, и есть еще один недостаток — они медленные. |
Последние записи от Wolf
- Рисуем фигуры. Прямоугольник (22.07.2012)