0

アクションスクリプトファイルをロードするflexでアプリケーションを開発しています。

<DrawingArea id="drawingArea"   xmlns="*" width="100%" height="100%" add="drawingArea_addHandler(event)"/>

動的に追加する必要があります。これを行う方法は?ガイドしてください

更新 これは私の描画領域var da:DrawingArea=new DrawingArea ですリスナー関数にアクセスする方法を作成する方法は? パブリック関数 DrawingArea() { super();

        addEventListener(FlexEvent.CREATION_COMPLETE, function(event:FlexEvent):void {
            erase();
        });

        addEventListener(MouseEvent.MOUSE_DOWN, function(event:MouseEvent):void {
            x1 = mouseX;
            y1 = mouseY;
            isDrawing = true;
        });

        addEventListener(MouseEvent.MOUSE_MOVE, function(event:MouseEvent):void {
            if (!event.buttonDown)
            {
                isDrawing = false;
            }

            x2 = mouseX;
            y2 = mouseY;
            if (isDrawing)
            {
                graphics.lineStyle(2, drawColor);
                graphics.moveTo(x1, y1);
                graphics.lineTo(x2, y2);
                x1 = x2;
                y1 = y2;
            }
        });

        addEventListener(MouseEvent.MOUSE_UP, function(event:MouseEvent):void {
            isDrawing = false;
        });
    }
4

3 に答える 3

0

この場合、関数はインラインで定義されます。とにかく名前を付けない限り、それは不可能です。私は提案します

addEventListener(MouseEvent.MOUSE_DOWN, mouseDownFunction);
public function mouseDownFunction(event:MouseEvent = null ):void {
        x1 = mouseX;
        y1 = mouseY;
        isDrawing = true;
    }

その後、オブジェクトを介してアクセスできるようになります。DrawingArea.mouseDownFunction()

于 2012-04-24T11:08:44.603 に答える
0

コードに変更を加えました。

package
    {
        import flash.events.MouseEvent;

        import mx.core.UIComponent;

        public class DrawingArea
        {
            private var _target:UIComponent;

            private var _x1:Number;
            private var _y1:Number;

            private var _x2:Number;
            private var _y2:Number;

            [Bindable]
            private var _isDrawing:Boolean = false;

            private var _drawColor:uint = 0xFFFF00

            public function DrawingArea(target:UIComponent)
            {
                //TODO: implement function
                _target = target
                _target.addEventListener(MouseEvent.MOUSE_DOWN, downEvent, false, 0, true);
                _target.addEventListener(MouseEvent.MOUSE_UP, upEvent, false, 0, true);
                _target.addEventListener(MouseEvent.MOUSE_OUT, upEvent, false, 0, true);
            }

            private function downEvent(event:MouseEvent):void
            {
                _x1 = event.localX;
                _y1 = event.localY;
                _isDrawing = true;

                _target.addEventListener(MouseEvent.MOUSE_MOVE, moveEvent, false, 0, true);
            }

            private function moveEvent(event:MouseEvent):void
            {
                if (!event.buttonDown)
                {
                    _isDrawing = false;
                }

                _x2 = event.localX;
                _y2 = event.localY;
                if (_isDrawing)
                {
                    _target.graphics.lineStyle(2, _drawColor);
                    _target.graphics.moveTo(_x1, _y1);
                    _target.graphics.lineTo(_x2, _y2);
                    _x1 = _x2;
                    _y1 = _y2;
                }

            }

            private function upEvent(event:MouseEvent):void
            {
                _isDrawing = false;

                _target.removeEventListener(MouseEvent.MOUSE_MOVE, moveEvent);
            }

            public function set drawColor(value:uint): void{
                _drawColor = value;
            }

        }
    }

DrawingArea のオブジェクトを作成し、クラス自体をコンテナーとして渡すクラス DrawingAreaView.mxml を作成しました。

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns="components.*" xmlns:mx="http://www.adobe.com/2006/mxml"
           creationComplete="onInit();">

    <mx:Script>
        <![CDATA[
            import components.DrawingArea;

            private var drawingArea:DrawingArea;

            private function onInit():void {
                drawingArea = new DrawingArea(this);
            }
        ]]>
    </mx:Script>
</mx:Canvas>

アプリケーションで上記のクラスを使用します。

<DrawingAreaView id="drawingArea" width="100%" height="100%"/>

or

private var _drawingAreaView:DrawingAreaView = new DrawingAreaView();

parentObject.addChild(_drawingAreaView); 
于 2012-04-24T12:25:38.863 に答える
0

ファイルをメモリにロードして実行することはできません。それが必要な場合は、Acionscript で実行します。ただし、できることはDrawingArea、何らかのイベント (ユーザーのクリックや特定のタイムアウト期間など) に基づいて実行時に (または他の要素) を作成することです。

于 2012-04-24T09:46:12.297 に答える