2016-02-08 64 views
1

我創建一個拖放使用AS3掉落遊戲,我想檢查時,除了一個影片剪輯的在畫面外身後移動視圖,讓用戶選擇在哪裏放棄它。檢查當影片剪輯的一部分離開舞臺

我不能'測試MovieClip憑據是否大於舞臺(scaleMode = NO_SCALE)寬度/高度,因爲有一部分舞臺隱藏在瀏覽器窗口後面。

這是相同的方面,因爲只是MOUSE_LEAVE這個時候它必須是對影片剪輯,我想看看後面MOUSE_LEAVE的代碼,但我不能達到它。

謝謝。

主類

[SWF(width='800', height='800',backgroundColor='#CC99FF', frameRate='60')] 
public class DragTest extends Sprite 
{ 
    public function DragTest() 
    { 
     addChild(new World(this)); 

     this.stage.scaleMode = "noScale"; 
     this.stage.align = "TL"; 

     this.graphics.lineStyle(5,0x555555,0.5); 
     this.graphics.drawRect(0,0,800,800); 
    } 
} 

WORLD CLASS

public class World extends Container // Container from my SWC 
{ 
    private var _display:Sprite; 
    private var _dragPt:Point; 
    private var _dragedObject:MovieClip; 

    public function World(display:Sprite) 
    { 
     super(); 

     _display = display; 

     myMC.addEventListener(MouseEvent.MOUSE_DOWN, onPickUp, false, 0, true); 

     display.stage.addEventListener(MouseEvent.MOUSE_UP, onDrop, false, 0, true); 
     display.stage.addEventListener(Event.MOUSE_LEAVE, onMouseLeave, false, 0, true); 
    } 

    protected function onMouseLeave(event:Event):void 
    { 
     trace("Mouse Is Leaving The Stage"); 

    } 

    protected function onDrop(e:MouseEvent):void 
    { 
     _display.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMoveObject); 

    } 

    private function onPickUp(e:MouseEvent) 
    { 
     _dragedObject = e.currentTarget as MovieClip; 

     _display.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMoveObject, false, 0, true); 
    } 

    protected function onMoveObject(e:MouseEvent):void 
    { 
     var point:Point = new Point(_display.stage.mouseX, _display.stage.mouseY); 

      (_dragedObject as MovieClip).x = point.x; 
      (_dragedObject as MovieClip).y = point.y;   
    } 
} 

下面是一個例子: Simple Code

+0

就這樣,這不是另一個** [X/Y問題](http://meta.stackexchange.com/a/66378)**。您的問題是關於如何將Flash內容從一個瀏覽器窗口拖到另一個瀏覽器窗口?我對「舞臺隱藏在瀏覽器窗口後面」感到困惑,並且還說:「...在屏幕之外將視圖移動到後面並讓用戶選擇將其放置在哪裏。」 –

+0

實際上它不是從一個窗口拖到另一個窗口,舞臺有時隱藏在瀏覽器後面,因爲我使用noScale,所以當你縮小窗口的大小時,一部分舞臺沒有顯示,我正在嘗試做什麼當一個動畫片段正在觸摸舞臺的顯示區域,檢測它即將離開的時候,它對MOUSE_LEAVE很有效,我只是想用MC來做。 –

+0

** [這個答案](http://stackoverflow.com/a/6050299/2057709)**沒有幫助?提供一個可以「固定」的小型可測試示例代碼。通常,我只需要使用一個'enterframe'函數來說明何時按下鼠標按鈕,然後是'myMC.x = stage.mouseX;'這樣MC遵循鼠標,也許你也可以使用'Mouse_Leave'方法... –

回答

1

最簡單的方法可能是使用getBounds(stage)stageWidthstageHeight比較:

var bounds:Rectangle = _draggedObject.getBounds(stage); 
if (bounds.left < 0) { 
    // left part of object is off-screen 
} else if (bounds.right > stage.stageWidth) { 
    // right part of object is off-screen 
} 
if (bounds.top < 0) { 
    // top part of object is offscreen 
} else if (bounds.bottom > stage.stageHeight) { 
    // bottom part of object is off-screen 
} 

您可以移動在每種情況下的display

+0

如果瀏覽器窗口>階段窗口,如果將窗口大小減小到舞臺不會工作,則MOUSE_LEAVE的作用相反,這適用於這兩種情況。 –

+0

將舞臺大小與窗口大小相同,方法是將其嵌入到100%寬度和100%高度。 – Aaron

+0

是的,我已經這樣做了,但SWF大小已經設置好,使用SWF元標籤,增加了NO_SCALE,即使我改變窗口大小,舞臺也不會改變:)。 –

0

您可以嘗試創建一個比你小一級一點點的不可見區域。

所以,你可以在MOUSE_LEAVE事件添加到區域中,當你的鼠標離開該區域,你可以做你想做的。

Check the example here

+0

我明白你的意思了,但我該如何知道該區域的寬度/高度,MOUSE_LEAVE有什麼好處,它可以檢測到瀏覽器顯示的區域,而不需要外部接口,因爲如果永久調用該區域將會很沉重。 –

相關問題