2013-06-01 60 views
0

我真的很習慣使用動作腳本,並且可以使用一個很好的解釋如何做到這一點,以及它如何工作。AS3如何檢測舞臺上沒有目標的startTouchDrag?

我想在Android的AS3中創建一個舞臺事件。

當用戶觸摸舞臺而不是特別對象時,我需要檢測它們是否在拖動以及手指拖動到的位置。

我已經開始喜歡這個來檢測他們是否觸及階段:

stage.addEventListener(TouchEvent.TOUCH_BEGIN, stageTouchBegin); 

var stageTouchDragBounds:Rectangle = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight); 

function stageTouchBegin(event:TouchEvent):void 
{ 
event.target.startTouchDrag(event.touchPointID, false, stageTouchDragBounds:Rectangle); 
trace(event.stageX); 
trace(event.stageY); 
} 

這條線路是從哪裏獲得,我假定這是因爲目標通常會被引用的錯誤電影符號等等,但在這種情況下,這不是因爲它的舞臺。我試着用舞臺代替目標,但它沒有工作:

event.target.startTouchDrag(event.touchPointID, false, stageTouchDragBounds:Rectangle);

以下是錯誤:1061:通過靜態類型flash.events:TouchEvent引用調用可能未定義的方法startTouchDrag。


從那裏,我的計劃是繼續使用這樣的事情,開始錄製他們在那裏爲:

var curPosX; var curPosY;

function stageTouchMoveHandler(event:TouchEvent):void 
{ 
trace(event.stageX); 
this.curPosX = event.stageX; 
trace(event.stageY); 
this.curPosY = event.stageY; 
} 

然後處理結束這樣:

function stageTouchEndHandler(event:TouchEvent):void 
{ 
event.target.stopTouchDrag(event.touchPointID); 
} 

任何有關如何做到這一點或解釋目標的見解/建議,es特別的例子代碼,將不勝感激。感謝您的時間!

+0

也許你不清楚'startTouchDrag()'方法應該做什麼。它的意思是實際拖動一個對象,就像在拖放操作中一樣。舞臺不是你可以在屏幕上拖動的東西。您只能在正在或擴展'Sprite'類的對象上使用'startTouchDrag()'方法(其階段不是)。我不擅長觸摸事件,否則我會提供更多建議。但是絕對不可以在舞臺上使用'startTouchDrag()'試試看[這裏](http://help.adobe.com/en_US/as3/dev/WS1ca064e08d7aa93023c59dfc1257b16a3d6-7ffe.html) –

回答

0

想到你正在嘗試做什麼之後,我認爲你的問題的答案是不要打電話給startTouchDrag()方法並按照你的計劃進行。您所展示的是確定用戶在何處開始/停止其「觸摸移動」手勢的正確方法。

嘗試並拖動stage ... stage實際上就是您的Flash影片顯示的階段。它包含整個Flash應用程序,因此不能被拖動。

爲了重申我在上面的評論中所述的內容,startTouchDrag()是您在Sprite上調用的一種方法(或者一些延伸爲Sprite的對象)。當您想要在屏幕上拖動某些內容時(例如在拖放操作中)使用此方法。

+0

你已經說是有道理的。我只是在努力尋找如何跟蹤他們的運動,我不確定要搜索什麼。我的stageTouchBegin函數可以很容易地爲我提供觸摸的座標,但我不知道如何使它保持跟蹤它們的移動直到釋放。 – Eric

+0

@Eric我強烈建議閱讀我上面鏈接的評論中的Adobe文章。最後一個代碼示例與您正在做的事情非常相似。由於觸摸手勢可能涉及多個「觸點」,因此他們使用該事件的「touchPointID」屬性來確定該事件來自哪個「手指」。當觸摸終於結束時,只需確定結束的x/y座標,並從頭開始比較w/coords。 –

+0

感謝您的全力支持Sunil,我在您的指導下開展工作。我花了一段時間才明白如何正確使用touchPoint和事件。這就像你說的,我不需要startTouchDrag()。我只需要在我的函數中調用事件: 'stage.addEventListener(TouchEvent.TOUCH_MOVE,stageTouchMoveHandler);' 'function stageTouchMoveHandler(event:TouchEvent):void'然後它給我當前位置,用戶在在飛行中。 – Eric