1

我使用八哥框架,以模擬的onclick方法我用這個代碼:八哥的onClick方法

if(e.getTouch(this).phase == TouchPhase.ENDED){ 
      //Some code 
} 

這是確定的,但它也激發,如果鼠標不在按鈕了,但是我d只有當它結束時纔會發送。有什麼辦法可以做到這一點? 感謝

代碼

,「本」是一個Sprite,這是有點無關緊要吼聲

回答

0

根據the docs如果目標是目前觸摸的TouchEvent類的interactsWith(target:DisplayObject)方法應返回true。我沒有辦法驗證這一理論,但下面應該工作:

if (e.getTouch(this).phase == TouchPhase.ENDED && e.interactsWith(this)) { 
    //The touch ended on the same DisplayObject as it originated at 
} 
+0

這根本不起作用,謝謝你的祝福 –

0

這個怎麼樣的想法:

if (e.getTouch(this).phase == TouchPhase.ENDED) { 
    if (this.hitTestPoint(stage.mouseX, stage.mouseY, true)) { 
     // Some code 
    } 
} 
+0

這和以前一樣。它不會給你實際的觸摸,它給予觸摸,當(我想)你點擊按鈕(如onmousedown)時發出, –

+0

編輯該帖子以使用當前鼠標位置。 – khailcs

+0

我不熟悉Starling框架;我試圖建議的是添加第二個條件來驗證鼠標確實位於按鈕頂部的想法,因爲問題是「它也會觸發,如果鼠標不在按鈕上......」請對待這然後作爲一種僞代碼。感謝您認爲這是一個好主意。乾杯! – khailcs

0

最簡單的方法是使用一個starling.display.Button做。他們派遣TRIGGERED事件,這基本上是你想要的。在「不那麼容易」的方法是,讓您的觸摸軌跡,通過複製什麼是按鈕實際上做:

private function onTouch(event:TouchEvent):void 
    { 
     var touch:Touch = event.getTouch(this); 
     if (!mEnabled || touch == null) return; 

     if (touch.phase == TouchPhase.BEGAN && !mIsDown) 
     { 
      //equivalent to MOUSE_DOWN 
      mIsDown = true; 
     } 
     else if (touch.phase == TouchPhase.MOVED && mIsDown) 
     { 
      // reset button when user dragged too far away after pushing 
      var buttonRect:Rectangle = getBounds(stage); 
      if (touch.globalX < buttonRect.x - MAX_DRAG_DIST || 
       touch.globalY < buttonRect.y - MAX_DRAG_DIST || 
       touch.globalX > buttonRect.x + buttonRect.width + MAX_DRAG_DIST || 
       touch.globalY > buttonRect.y + buttonRect.height + MAX_DRAG_DIST) 
      { 
       mIsDown = false; 
      } 
     } 
     else if (touch.phase == TouchPhase.ENDED && mIsDown) 
     { 
      mIsDown = false; 
      //this is a click 
      dispatchEventWith(Event.TRIGGERED, true); 
     } 
    } 

you'l不得不改變buttonRect代碼,以反映你的精靈的外形,但基本上你在這裏是。

+0

您也可以在mouse_down部分中添加超時,因此只會檢查「quickclicks」。但如果你走這麼遠,我會推薦使用Gestouch。 – Boris