2014-02-09 19 views
0

我想拖動一個Actor周圍的MouseLibGDX。 我的代碼:拖動libgdx flickers

// overrides in the ClickListener 
     @Override 
     public boolean touchDown(InputEvent event, float x, float y, 
       int pointer, int button) { 
      touching = true; 
      prevTouchPosition = new Vector2(x, y); 
      return super.touchDown(event, x, y, pointer, button); 
     } 

     @Override 
     public void touchDragged(InputEvent event, float x, float y, 
       int pointer) { 
      dragging = true; 
      lastTouchPosition = new Vector2(x, y); 
      super.touchDragged(event, x, y, pointer); 
     } 

     @Override 
     public void touchUp(InputEvent event, float x, float y, 
       int pointer, int button) { 
      touching = false; 
      super.touchUp(event, x, y, pointer, button); 
     } 

// the update method 
    @Override 
    public void act(float delta) { 
     super.act(delta); 
     if(dragging){ 
      Vector2 diff = new Vector2(lastTouchPosition).sub(prevTouchPosition); 
      translate(diff.x, diff.y); 
      prevTouchPosition = new Vector2(lastTouchPosition); 
      dragging = false; 
     } 

    } 

我越走動它變得越差Actor。 這個想法是保持最後兩個Mouse的位置,並使用它們之間的差異來更新Actor的位置。

+0

您能提供比「更糟糕」更多的細節嗎?至於問題是什麼?停止移動?移動太多?獲得真正的緩慢? –

+0

我會嘗試:所以我先從左下角的圖像開始,然後將其拖到右上角。在這種情況下,鼠標將開始引導圖像,並在圖像將會到達右上角。另外,拖動圖像的位置並不總是逐漸變化,有時會回退一點。在另一種情況下,我抓住圖像並旋轉它,我可以清楚地看到兩張相隔很遠的圖像。 – Vjeetje

回答

2

任何像這樣增量的事情都會遭遇舍入誤差。此外,我認爲你不需要每幀更新prevTouchPosition;在沒有舍入誤差的情況下,它不應該改變。請注意,只有在對象沒有旋轉或縮放時,您的代碼才能工作。在觸摸

  • 下,觸摸點L的對象的局部座標系:

    更健壯的拖動算法的工作方式如下

    • G:= L
  • 在觸摸移動,在物體局部座標中的接觸點L:
    • setPosition(toGlobal(L) - toGlobal(G)+ getPosition())

請注意,在拖動操作過程中,我們從不更新G;它用於記住物體被「抓住」的位置,並且我們會不斷對齊物體,以便此點位於當前位置。這裏,toGlobal(L) - toGlobal(G)爲您提供全局座標中的「delta」向量,我們將其添加到當前位置。

請注意,我假設沒有對象層次結構,所以當前位置本身是全局座標。否則,你也需要考慮父母的變換。

+0

感謝您的確切答覆。雖然我有一個小問題。拖動工作正常,只有一個旋轉或只有一個縮放。但是當我將旋轉和縮放與xScaling和yScaling之間的巨大差異相結合時,我拖動的Actor稍稍在鼠標光標周圍晃動了一下。使用xScale = yScale時效果不可見。但是當abs(xScale-yScale)增加時更明顯。當我設置xScale = 1和yScale = 2時,效果真的很煩人。通過晃動鼠標光標我的意思是我暫時拖動的圖像具有不同的座標(除了鼠標光標)。 – Vjeetje

+0

如果您發佈了一個新問題並向我們顯示代碼,那麼最好。 – Thomas

+0

http://stackoverflow.com/questions/21801439/dragging-an-actor-shakes-around-mouse-pointer – Vjeetje