2010-04-07 95 views
0

如何根據創建對象的類內的父對象或舞臺來引用顯示對象的座標?限制顯示對象在AS3中的拖動座標

本質上,當我從一個自定義類創建一個新的精靈對象並將其添加到顯示列表中時,我想在自定義類中包含限制拖動座標到舞臺或舞臺的一部分的代碼。

//Frame Script 
import Swatch; 

var test:Sprite = new Swatch(); 
addChild(test); 

___________________ 

//Custom Class 
package 
{ 
import flash.display.Sprite; 
import flash.events.MouseEvent; 

public class Swatch extends Sprite 
    { 
    public function Swatch() 
     { 
     init(); 
     } 

    private function init():void 
     { 
     var swatchObject:Sprite = new Sprite(); 

     swatchObject.graphics.beginFill(0x0000FF, 1); 
     swatchObject.graphics.drawRect(100, 100, 150, 150); 
     swatchObject.graphics.endFill(); 

     swatchObject.addEventListener(MouseEvent.MOUSE_DOWN, onDrag, false, 0, true); 
     swatchObject.addEventListener(MouseEvent.MOUSE_UP, onDrop, false, 0, true); 

     this.addChild(swatchObject); 
     } 

    private function onDrag(evt:MouseEvent):void 
     { 
     evt.target.startDrag(); 
     //how to limit it's dragability to the Stage? 

     } 

    private function onDrop(evt:MouseEvent):void 
     { 
     evt.target.stopDrag(); 
     } 
    } 
} 
+0

不要忘記聽Event.MOUSE_LEAVE事件(附加'onDrop'),以防用戶點擊對象並讓我們離開舞臺(雖然也許這是內置於'startDrag ()'功能已經?)。參考:http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/display/Stage.html#event:mouseLeave – Cameron 2010-04-07 16:18:54

回答

1

有一些你想做的本地支持。 startDrag()接受一個矩形作爲限制拖動可以發生的區域的參數。

function startDrag(lockCenter:Boolean = false, bounds:Rectangle = null):void 

希望幫助,

泰勒。

+0

好吧,所以startDrag的第二個參數就是我要找的。我如何從我的對象中引用舞臺?我試圖包括flash.display.Stage,然後跟蹤(this.parent.stage.stageWidth),但它給了一個錯誤。 – TheDarkIn1978 2010-04-07 16:12:18

+0

只要你在顯示列表中,你可以只說「stage.stageWidth」,你不需要導入它 – 2010-04-07 17:04:17

+0

好吧,我想通了。我不得不在我的構造函數中爲init()函數創建一個用於ADDED_TO_STAGE的事件監聽器,否則當我嘗試引用它時stage是null。忘了那個陷阱。 – TheDarkIn1978 2010-04-07 19:10:06