2012-05-06 74 views
0

我正在處理一個非常簡單的項目的第一步:內存時間軸。基本上,他們列出了幾年的時間表。這是一條線,你應該能夠水平移動它去到你選擇的年份,然後添加事件和信息。Flash水平拖放問題

現在,我試圖實現該行,我認爲這將是無限寬,並拖動功能。

我有一些工作,但它是錯誤的,我沒有看到有什麼問題。我對Flash沒有經驗,所以我在這裏問。

這是代碼。舞臺是空的,時間線上沒有代碼。僅這一個文檔類,從屬性創建:

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: 只需在黑線後創建一個不可見的容器,以便'測試'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事件偵聽到舞臺,而不是「測試」這將是更好的MovieClip 。請使用:

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

謝謝stage.addEventListener! – W55tKQbuRu28Q4xv