2012-05-06 2 views
0

저는 작업 중 간단한 첫 단계 인 메모리 타임 라인에서 작업하고 있습니다. 기본적으로 몇 년 동안 나열된 타임 라인. 그것은 하나의 라인이고, 당신은 당신이 선택한 해 가면서 이벤트와 정보를 추가하기 위해 그것을 수평으로 움직일 수 있어야합니다.플래시 수평 드래그 앤 드롭 문제

지금 당장은 그 라인을 구현하려고합니다.이 라인은 무한히 넓어야하고 드래그는 &입니다.

나는 작동하지만 뭔가 도청 당했고 어떤 일이 잘못되는지 알지 못합니다. 나는 플래시에 익숙하지 않기 때문에 여기에서 묻고있다.

이것은 코드입니다. 스테이지가 비어 있으며 타임 라인에 코드가 없습니다. 속성에서 생성 그냥이 하나 개의 문서 클래스 :

package { 

    import flash.geom.Rectangle; 
    import flash.events.MouseEvent; 
    import flash.display.Sprite; 


    public class Document extends Sprite { 

     // rootMc, global container 
     public static var rootMc:Sprite = new Sprite(); 
     public var test:Sprite = new Sprite(); 

     public function Document() { 
      test.graphics.beginFill(0x000000); 
      test.graphics.drawRect(0, stage.stageHeight/2, 2000, 6); 
      test.graphics.endFill(); 

      test.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); 
      test.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); 

      addChild(rootMc); 
      rootMc.addChild(test); 
     } 

     function mouseDownHandler(evt:MouseEvent):void { 
      trace("mouseDownHandler"); 
      var sprite:Sprite = Sprite(evt.target); 
      sprite.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); 
        //Limit the drag to a horizontal rectangle 
      sprite.startDrag(false, new Rectangle(0, sprite.y, 2000, 0)); 
     } 

     function mouseUpHandler(evt:MouseEvent):void { 
      trace("mouseUpHandler"); 
      var sprite:Sprite = Sprite(evt.target); 
      sprite.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); 
      sprite.stopDrag(); 
     } 

     private function mouseMoveHandler(evt:MouseEvent):void { 
      trace("mouseMoveHandler"); 
      evt.updateAfterEvent(); 
     } 
    } 

} 

문제점은 : 나는 라인에 정확히 클릭하면

  1. 드래그 & 드롭에만 작동합니다. 나는 위아래로 클릭 할 수있는 공간이 있기를 바랍니다. 그러나 선은 한 픽셀이 아닌 세로로 움직여서는 안됩니다. 지금 당장이 방법을 구현하는 방법을 모르겠습니다.
  2. 첫 번째 문제와 관련 : mouseUpHandler는 커서가 줄에있을 때만 호출됩니다. 픽셀에 의해 꺼져 있고 마우스 버튼을 놓으면 드래그가 계속됩니다. 그런 다음 다시 라인으로 이동하고 다시 클릭하여 놓아 야합니다. 마우스 버튼을 놓을 때 끌기가 멈추도록하려고합니다. 또는 마우스가 무대를 떠날 때.

이것은 아마도 경험이 부족한 것입니다. 이 기능을 처리하기 위해 어떤 기능이 있는지 알지 못합니다. 그래서 나는 그것에 대해 묻고 있습니다. 동시에 코드에 대한 피드백을 얻을 기회입니다.

답변

4

여기 내 드래그에 관한 문제를 지적하기위한 조언은 &입니다.

문제 1 : 검정색 선 뒤에 보이지 않는 컨테이너를 만들어 'test'MovieClip이 커지도록하십시오. 그러나 검은 선만 보입니다. 검은 선이 그려 전에 다음 코드를 추가하여이 작업을 수행 할 수 있습니다 :

test.graphics.beginFill(0xffffff,0); 
// white container with 0 alpha 
test.graphics.drawRect(0, stage.stageHeight/2 - 10, 2000, 26); 
// start 10px before and end 10 px after 
test.graphics.endFill(); 

문제 2 : 당신이 '시험'으로 무대에 MouseEvent.MOUSE_UP의의 EventListener를 추가하지 않을 경우 그것은 더 나은 것 무비 클립 . 다음을 사용하십시오 :

this.stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); 
+0

감사합니다. stage.addEventListener! – W55tKQbuRu28Q4xv