坐标不会更改拖动缩放的fxg图形

时间:2013-02-24 18:15:33

标签: actionscript-3 scale flashdevelop fxg

我正在使用FlashDevelop,actionscript 3和fxg图形构建与Illustrator(导出为fxg 2.0)。

我使用Illustrator导入一个fxg矩形构建,然后当你克隆它时我将它设置为可拖动,因此它的坐标会改变。如果矩形比例为1(这意味着:无比例),则此方法有效。 但是,如果我改变它的比例(例如fxgRect.scaleX = fxgRect.scaleY = 0.5;)你可以拖动它但它的坐标不会改变!!这让我很疯狂,因为精灵改变了位置,但是如果你问它的坐标,他们就不会改变! 然后我设置fxgRect.mouseChildren = false;所以我肯定会移动精灵fxgRect而不是内部的东西。 (这只是一个例子,我的目标是用Illustrator构建复杂的图形并在FlashDevelop中使用它。)

先谢谢你的帮助。

这是为测试此问题而完成的代码。要使用此示例,您必须创建一个fxg矩形(fxgrectangle.fxg)并将其放在SimpleDragFxg.as类的同一文件夹中。

import flash.display.*;
import flash.events.*;
import fxgrectangle;

public class SimpleDragFxg extends Sprite
{
    public var fxgRect:Sprite = new fxgrectangle(); // make an istance of fxgRect

    public function SimpleDragFxg()
    {
        //----------------------------------------------------------
        addChild(fxgRect);
        fxgRect.name = "FXGrect";
        fxgRect.x = fxgRect.y = 50;
        fxgRect.mouseChildren = false;
        fxgRect.scaleX = fxgRect.scaleY = 0.5; //<<< this makes the problem
        trace ("I'm ", this.name, "and I contain ", this.fxgRect.name, "which contains ", fxgRect.getChildAt(0).name);
        fxgRect.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
        //--------------------------------------------------------------
    }
    private function onMouseDown (e:MouseEvent):void
    {
        trace ("e.target: ", e.target.name);
        if (DisplayObject(e.target).name == "FXGrect")
        {
            trace ("FXGrect position BEFORE drag: ", fxgRect.x, fxgRect.y);
            Sprite(e.target).startDrag();
            stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
        }
    }
    private function onMouseUp (e:MouseEvent):void
    {
        fxgRect.stopDrag();
        stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
        if (DisplayObject(e.target).name == "FXGrect")
        {
            trace ("FXGrect position AFTER drag: ", fxgRect.x, fxgRect.y);
        } 
    }
}

1 个答案:

答案 0 :(得分:1)

尝试

public var fxgRect:Sprite = new Sprite();
fxgRect.addChild(new fxgrectangle());
相关问题