2013-02-24 2 views
0

Я использую FlashDevelop, actioncript 3 и графическую сборку fxg с Illustrator (экспортируется как fxg 2.0).Координаты не меняют перетаскивание масштабированной графики fxg

Я импортирую прямоугольник прямоугольника fxg с Illustrator, после чего я его перетаскиваю, когда вы клик на нем, поэтому его координаты меняются. Это работает, если масштаб прямоугольника равен 1 (это означает: нет масштаба). Но если я изменю масштаб (например, fxgRect.scaleX = fxgRect.scaleY = 0.5;), вы можете перетащить его, но его координаты не меняются! И это заставляет меня сходить с ума, потому что спрайт меняет положение, но если вы спросите его координаты, они не меняются !! И я установил fxgRect.mouseChildren = false;, поэтому я уверен переместить спрайт fxgRect, а не что-то внутри него. (Это всего лишь пример, моя цель - построить сложную графику с иллюстратором и использовать ее в 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); 
     } 
    } 
} 
+0

Вы можете не масштабируются перетаскивается элемент? Я имею в виду, что не применяйте преобразование перетаскиваемого элемента вместо контейнера, который будет перетаскиваться, и контент, который будет иметь преобразование. Более того вы можете отслеживать (e.target); в onMouseDown и onMouseUp? Может быть, вы перетаскиваете не то, что думаете, что перетаскиваете :) :) :) –

+0

Да, возможно, я мог бы использовать не масштабируемые элементы, но когда я нахожу проблему, я пытаюсь ее решить. Спасибо, чтобы комментировать мой вопрос. – AntonioG

ответ

1

Попробуйте

public var fxgRect:Sprite = new Sprite(); 
fxgRect.addChild(new fxgrectangle()); 
+0

Да, это работает !!! Большой! Было бы интересно узнать, почему он работает таким образом. Кажется, он очень похож на меня. В любом случае, большое спасибо. – AntonioG

+0

Я бы проголосовал за ваш ответ, но моя репутация слишком низкая, и я не могу ... :) – AntonioG

+0

«Отлично! Было бы интересно узнать, почему это работает так: «Это очень старое обходное решение для инкапсуляции проблемного блока в movieclip, я использую его и симулятивные квитанции sinse Flash 4 :) – Smolniy

 Смежные вопросы

  • Нет связанных вопросов^_^