2017-07-29 126 views
0

我正在嘗試使用多個按鈕進行基於觸摸的滾動MovieClip。我希望該按鈕根據動畫片段的mouseDownmouseUp事件進行移動。我希望有人能幫助我解決這個問題。在Adobe Flash上​​觸摸滾動Android上的Air

var maxY:Number = 725; 
var minY:Number = 350; 
var _startY:Number; 
var _startMouseY:Number; 
addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); 

function mouseDownHandler(event:MouseEvent):void { 
    _startY = davies.y; 
    _startY = toa.y; 
    _startMouseY = mouseY; 
    stage.addEventListener(MouseEvent.MOUSE_MOVE, stage_mouseMoveHandler, false, 0, true); 
    stage.addEventListener(MouseEvent.MOUSE_UP, stage_mouseUpHandler, false, 0, true); 
} 

function stage_mouseMoveHandler(event:MouseEvent):void { 
    var offsetY:Number = mouseY - _startMouseY; 
    background_scroll_product.y = Math.max(Math.min(maxY, _startY + offsetY), minY); 
    davies.y = Math.max(Math.min(maxY, _startY + offsetY), minY); 
    toa.y = Math.max(Math.min(maxY, _startY + offsetY), minY); 
} 

function stage_mouseUpHandler(event:MouseEvent):void { 
    stage.removeEventListener(MouseEvent.MOUSE_MOVE, stage_mouseMoveHandler); 
    stage.removeEventListener(MouseEvent.MOUSE_UP, stage_mouseUpHandler); 
} 

前後滾動後:

+0

什麼是預期和實際的結果呢? –

+0

我想移動davies按鈕,toa按鈕和許多按鈕滾動像movieclip,我共享的代碼只滾動movieclip,如果我將該按鈕分組到movieclip,我不能推動按鈕在另一個框架上運行。對不起我的英文不好,我希望你能幫助我,謝謝你的回覆 –

回答

0

解決方案

1:嘗試用以下替換Math.max(Math.min(maxY, _startY + offsetY), minY);

clamp(mouseY - _startY + offsetY, minY, maxY); 

function clamp(original:Number, low:Number, high:Number):Number { 
    return (original > high) ? high : (original < low) ? low : original; 
} 

2:將所有內容移動到一個容器中。移動一個對象比移動多個對象更容易。

多個對象:

0:MainTimeline 
    0:background_scroll_product //.y += offsetY; 
    1:davies     //.y += offsetY; 
    2:toa      //.y += offsetY; 
    ... 

一個對象:

0:MainTimeline 
    0:container //.y += offsetY; 
     0:background_scroll_product 
     1:davies 
     2:toa 
     ... 

示範

下面的代碼,你可以拖放到一個新的項目,它將與編譯工作滾動容器。請注意,其他人在問問題時可能需要這樣的Minimal, Complete, and Verifiable example

var background_scroll_product, davies, toa; 
demoSetup(); 

/* ^^^ Omit this if you already have these objects defined ^^^ */ 

// Create a container for our content. 
var container:Sprite = new Sprite(); 
addChild(container); 

// Put the content inside the container. 
container.addChild(background_scroll_product); 
container.addChild(davies); 
container.addChild(toa); 

// setup the min based on the size of the contents. 
var loc:Object = { 
    "max":50, 
    "min":stage.stageHeight - container.height 
}; 

addEventListener("mouseDown", mouseHandler); 

function mouseHandler(e:Event):void { 
    switch (e.type) { 
     case "mouseDown": 
      loc.start = mouseY; 
      loc.container = container.y; 
      addEventListener("mouseUp", mouseHandler); 
      addEventListener("mouseMove", mouseHandler); 
      break; 
     case "mouseUp": 
      removeEventListener("mouseUp", mouseHandler) 
      removeEventListener("mouseMove", mouseHandler); 
      break; 
     case "mouseMove": 
      // Scroll the container. 
      container.y = clamp(mouseY - loc.start + loc.container, loc.min, loc.max); 
      break; 
    } 
} 

function clamp(original:Number, low:Number, high:Number):Number { 
    return (original > high) ? high : (original < low) ? low : original; 
} 

function demoSetup():void { 
    // This sets up a facsimile of the project, to create a Minimal, and Verifiable example. 
    var bg:Sprite = new Sprite(); 
    bg.graphics.beginFill(0xA1A1A1); 
    bg.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight); 
    bg.graphics.endFill(); 
    addChild(bg); 

    background_scroll_product = new Shape(); 
    background_scroll_product.graphics.beginFill(0xf0e3e5); 
    background_scroll_product.graphics.drawRect(0, 0, 250, 750); 
    background_scroll_product.graphics.endFill(); 

    davies = new Shape(); 
    davies.graphics.beginFill(0x243066); 
    davies.graphics.drawRect(0, 0, 200, 400); 
    davies.graphics.endFill(); 
    davies.x = davies.y = 25; 

    toa = new Shape(); 
    toa.graphics.beginFill(0xdc3734); 
    toa.graphics.drawRect(0, 0, 200, 200); 
    toa.graphics.endFill(); 
    toa.x = 25; 
    toa.y = 525; 
} 

響應FLA

我強烈建議你不要用工作場景,特別是因爲他們創造骯髒的國家不是迫切辨認。事實上,由於您似乎正在努力實現移動應用,您絕對應該考慮使用完整的UI框架,如FeathersUI。不管...

揮之不去的集裝箱

Timeline試圖把每一幀作爲程序的唯一狀態。您可以通過這種方式直觀地構建用戶界面,但它很笨拙。此外,正如您發現的那樣,當您將WYSIWYG與功能性編程混合在一起時,Flash UI永遠不會意識到並永遠不會「清理」。您手動添加了addChild(container),因此您還需要手動添加removeChild(container)。你可以把它放在你的監聽器函數裏面,作爲後退按鈕。

集裝箱懸停在標題欄

考慮你的主菜單heiarchy:

0: instance15 (Shape) 
1: button_back (SimpleButton) 
2: instance16 (StaticText) 
3: container (Sprite) 

正如你所看到的,層0通過2是你的頂部菜單的對象。在菜單後面移動container與調用addChildAt()一樣簡單,並將第二個參數設置爲0索引。

addChildAt(container, 0); 

最後圖像被剪輯

這樣做的原因是,你的內容不位於y:0。如果要解決這個問題,無論是在y:0移動到開始的內容,或加上抵消你的第一個圖形的最小值的...

"min":this.loaderInfo.height - container.height - davies.y 
+0

感謝您的幫助,但我已經嘗試過,仍然有關於容器的問題,如: 1.我不能把圖片放在上面作爲框架的滾動和滾動在框架上移動。 2.當我滾動容器時,最後一個按鈕nippon不會出現。 3.如果我按產品上的後退按鈕,滾動容器不會丟失,仍然可以在Scane菜單中找到 您可以在以下鏈接中看到: [https://drive.google.com/open ?id = 0B366CR2EpFQNN29LU2MtRW1GRjQ] [https://drive.google.com/open?id=0B366CR2EpFQNNExSV2wwZnh1N2M] 我真的希望你的幫助來解決這個問題。 –

+0

Sory那個鏈接有問題,可以在這裏找到; 1)。 2)。[https://www.dropbox.com/s/p9sthqrwor500k7/Product.fla?dl=0] 2)。 [https://www.dropbox.com/s/6b5ydkgaj20lk0a/Product.mp4?dl=0] –

+0

謝謝Atriace,我可以解決這個問題:)並再次感謝您的幫助 –