2015-12-21 49 views
0

在我的create()方法中,我創建了一個表並插入了一些按鈕,如下圖所示。按下按鈕前的設置位置Libgdx

http://www2.pic-upload.de/thumb/29190899/Unbenannt.png

用戶每次按下按鈕,一個新的拖累,能夠質地應該出現他的手指/按鈕位置下方。

我試過如下:

sourceImage.addListener(controller); 
testbutton.get(2).addListener(new ClickListener() { 
     @Override 
     public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { 
      sourceImage.setVisible(true); 
      sourceImage.setPosition(vec.x, vec.y); 
      return super.touchDown(event, x, y, pointer, button); 
     } 

    }); 

這個工作不錯,但我想讓它使用戶得到了他的手指上的紋理,而不必在其上再次按下拖動。

因此,我試圖在觸摸開始之前將圖像放到按鈕上。

問題是,我不能得到表按鈕的位置,因爲表將在應用程序啓動後呈現,而不是在create()中,如果我錯了,就糾正我。

它返回0,0,當我試圖讓在實際的表中的位置我創建()

我發現在論壇的解決方案: Getting Stage coordinates of Actor in Table in libGDX

public static Vector2 getStageLocation(Actor actor) { 
    return actor.localToStageCoordinates(new Vector2(0, 0)); 
} 

,並在我的渲染()

vec = getStageLocation(testbutton.get(2)); 

它給我在我的表中的按鈕的正確位置,但我不知道何時何地我必須設置的位置按鈕按下之前的紋理?

回答

0

您應該添加的輸入處理程序:

Gdx.input.setInputProcessor(new InputHandler()); 

然後在你的新類

 @Override 
    public boolean touchDown(int screenX, int screenY, int pointer, int button) { 

     return true; 
    } 
@Override 
    public boolean touchUp(int screenX, int screenY, int pointer, int button) { 
     return false; 
    } 
@Override 
    public boolean touchDragged(int screenX, int screenY, int pointer) { 
    rendrerWhatever.drawTextures(screenX, screenY); 

     return false; 
    } 

的touchDragged函數被調用每次按住點擊(觸摸)的位置改變時,你可以使用它的screenX和screenY爲紋理渲染的位置提供座標。

0

你是在正確的,你需要使用localToStageCoordinates方法來獲取一個演員的一個表中的舞臺上的地位,同時也認爲這種方法不會產生預期的效果後,直到舞臺/表已至少渲染一次,即設置表格元素的座標時。

一種可能的方法是在添加完所有表格元素後,提前一次在create方法中渲染屏幕。您可以撥打render(0)(如果您要擴展GameScreen類),或者調用包含表格的階段的draw方法。在那之後,localToStageCoordinates應該爲您提供您需要的值,並且您可以繼續使用create方法任務。