2013-02-24 1 views
0

저는 FlashDevelop, actionscript 3 및 fxg 그래픽을 Illustrator로 빌드합니다 (fxg 2.0으로 내 보임).좌표계가 스케일 된 fxg 그래픽 드래그를 변경하지 않습니다.

Illustrator에서 fxg 직사각형을 가져온 다음 클립핑 할 때 드래그 가능으로 설정하여 좌표가 변경됩니다. 이것은 직사각형 눈금이 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

'훌륭합니다! 이것이 왜 이렇게 작동 하는지를 아는 것은 흥미로울 것입니다. '문제 블록을 무비 클립으로 캡슐화하는 것은 매우 오래된 해결 방법입니다. 플래시 4를 사용하면됩니다. – Smolniy