1 Reply Latest reply on Aug 13, 2009 8:25 PM by Gregory Lafrance

    Drawing Class works in Flash but not in Flex

    MixMastaJames Level 1

      I have this simple class that I've been using in Flash, and it works fine, and i wanted to use it in Flex, but for whatever reason it won't work.  I get this error:


      TypeError: Error #1034: Type Coercion failed: cannot convert net.creativedynamix.drawing::DrawBox@1d8e341 to mx.core.IUIComponent.


      I tried just adding it:

      var drawArea:DrawBox = new DrawBox();



      and I got that error... so I just figured I'd try to add it to a canvas or something, so made a canvas and named it "cnvs" and did:


      var drawArea:DrawBox = new DrawBox();



      why can't you do this like you can in flash?


      I thought AS3 was supposed to work in both?



      well I tried to upload the AS file, but it won't let me for some reason, but its not big, so here it is:


      package net.creativedynamix.drawing
      import flash.display.Sprite;
      import flash.events.Event;
      import flash.events.MouseEvent;


      public class DrawBox extends Sprite
        private var _startX:Number;
        private var _startY:Number;
        private var _endX:Number;
        private var _endY:Number;
        private var _drawWidth:Number;
        private var _drawHeight:Number;
        private var _drawColor:Number = 0xFFFF00;
        private var baseSprite:Sprite;
        private var drawingSprite:Sprite;
        public function DrawBox():void {
         addEventListener(Event.ADDED_TO_STAGE, imAdded);
        private function imAdded(event:Event):void {
         baseSprite = new Sprite();
         baseSprite.x = 0;
         baseSprite.y = 0;
         baseSprite.graphics.beginFill(0x000000, .01);
         baseSprite.graphics.drawRect(0, 0, 2000, 2000);
         baseSprite.graphics.lineStyle(0, 0x000000, 0);
         baseSprite.addEventListener(MouseEvent.MOUSE_DOWN, startDrawing);
         drawingSprite = new Sprite();
        private function startDrawing(event:MouseEvent):void
         _startX = this.mouseX;
         _startY = this.mouseY;
         baseSprite.removeEventListener(MouseEvent.MOUSE_DOWN, startDrawing);
         baseSprite.addEventListener(MouseEvent.MOUSE_MOVE, doDrawing);
         baseSprite.addEventListener(MouseEvent.MOUSE_UP, stopDrawing);  
         drawingSprite.addEventListener(MouseEvent.MOUSE_UP, stopDrawing);
        private function doDrawing(event:MouseEvent):void {
         _drawWidth = this.mouseX - _startX;
         _drawHeight = this.mouseY - _startY;
         drawingSprite.graphics.beginFill(_drawColor, .2);
         drawingSprite.graphics.lineStyle(1, _drawColor, .5);
         drawingSprite.graphics.drawRect(_startX, _startY, _drawWidth, _drawHeight);
        private function stopDrawing(event:MouseEvent):void {
         baseSprite.addEventListener(MouseEvent.MOUSE_DOWN, startDrawing);
         baseSprite.removeEventListener(MouseEvent.MOUSE_MOVE, doDrawing);
         baseSprite.removeEventListener(MouseEvent.MOUSE_UP, stopDrawing);
         dispatchEvent(new Event(DrawingEvents.DONE_DRAWING));
        // Public Properties \\
        public function get startX():Number { return _startX; }
        public function get startY():Number { return _startY; }
        public function get endX():Number { return _endX; }
        public function get endY():Number { return _endY; }
        public function get drawWidth():Number { return _drawWidth; }
        public function get drawHeight():Number { return _drawHeight; }
        public function get drawColor():Number { return _drawColor; }
        public function set drawColor(_val:Number) { _drawColor = _val; }