Actionscript 3 是否可以在flex中动态添加(.as)actionscript文件?
我正在用flex开发应用程序,其中加载了动作脚本文件Actionscript 3 是否可以在flex中动态添加(.as)actionscript文件?,actionscript-3,apache-flex,Actionscript 3,Apache Flex,我正在用flex开发应用程序,其中加载了动作脚本文件 <DrawingArea id="drawingArea" xmlns="*" width="100%" height="100%" add="drawingArea_addHandler(event)"/> 您将无法在内存中加载文件,然后在Acionscript中执行它(如果您需要的话)。但是,您可以根据一些事件(如用户单击或特定超时时间)在运行时创建DrawingArea或任何其他元素。在这种情况下,您的函数是内联定义的
<DrawingArea id="drawingArea" xmlns="*" width="100%" height="100%" add="drawingArea_addHandler(event)"/>
您将无法在内存中加载文件,然后在Acionscript中执行它(如果您需要的话)。但是,您可以根据一些事件(如用户单击或特定超时时间)在运行时创建DrawingArea或任何其他元素。在这种情况下,您的函数是内联定义的。除非你不给他们起名字,否则无论如何这是不可能的。 我建议
addEventListener(MouseEvent.MOUSE_DOWN, mouseDownFunction);
public function mouseDownFunction(event:MouseEvent = null ):void {
x1 = mouseX;
y1 = mouseY;
isDrawing = true;
}
然后,它们应该可以通过对象访问。DrawingArea.mousedown函数我已对您的代码进行了更改
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;
}
}
}
创建了一个类DrawingAreaView.mxml,其中,为DrawingArea创建了对象,并将该类本身作为容器传递
<?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);
你说的动态是什么意思?编译应用程序之后或之前需要添加.as文件?@At Jevgenij Dmitrijev运行时My drawingArea是扩展uicomponent的独立类,如何在运行时绘制Area或任何其他元素?通过使用类似new drawingArea的内容创建新对象。您还可以查看getDefinitionByName函数,通过传入类名来创建实例。
<DrawingAreaView id="drawingArea" width="100%" height="100%"/>
or
private var _drawingAreaView:DrawingAreaView = new DrawingAreaView();
parentObject.addChild(_drawingAreaView);