Я использую FlashDevelop, actionscript 3 и сборку графики fxg с помощью Illustrator (экспортируется как fxg 2.0).
Я импортирую сборку прямоугольника fxg с помощью Illustrator, затем я делаю его перетаскиваемым, когда вы щелкаете по нему, поэтому его координаты меняются. Это работает, если масштаб прямоугольника равен 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);
}
}
}