2015-10-12 34 views
0

我試圖讓玩家點擊按住然後拖動並放開,這將完成從你點擊的地方繪製一條線到你放開的位置。然而,我似乎無法弄清楚如何保持線條呈現。每次你點擊拖動,然後放開,它會正確繪製線條,然後如果你嘗試繪製另一條線條就會消失。這裏是我的輸入監聽器獲取位置通過單擊和取消點擊呈現多條線libgdx java

@Override 
public boolean touchDown(int screenX, int screenY, int pointer, int button) { 
    if(button == Buttons.LEFT){ 
     buttonPositions[0].x = screenX; 
     buttonPositions[0].y = screenY; 
     projector.unproject(buttonPositions[0]); 
    } 
    return false; 
} 

@Override 
public boolean touchUp(int screenX, int screenY, int pointer, int button) { 
    if(button == Buttons.LEFT){ 
     buttonPositions[1].x = screenX; 
     buttonPositions[1].y = screenY; 
     projector.unproject(buttonPositions[1]); 
     lineDraws.add(buttonPositions); 
    } 
    return false; 
} 

buttonPositions代碼的size 2Vector2數組,所以你可以添加,你點擊,在那裏你放手那麼arraylist lineDraws存儲了Vector2數組,然後我嘗試遍歷這個列表,並使其像這樣

public void render(float delta){ 
    if(!tutOver){ 
     startTutorial(); 
    } 



    Gdx.gl.glClearColor(0, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    renderer.begin(); 
    for(int i = 0; i < listener.getPositionsList().size() - 1; i+=2){ 
     renderer.line(listener.getPositionsList().get(i)[0], listener.getPositionsList().get(i + 1)[1]); 

    } 
    renderer.end(); 

} 

我不知所措,不知道該做什麼,而i+=2是這樣就得出那麼接下來的兩個第一兩個座標。任何幫助是極大的讚賞!

回答

1

首先使用Array<> libgdx類代替ArrayList - 更方便。

你的問題似乎在touchDowntouchUp方法。每次這樣,即使你把它添加到收藏要覆蓋前一個你改變的

buttonPositions[0].x 
    buttonPositions[0].y 
    buttonPositions[1].x 
    buttonPositions[1].y 

值。

另外我不認爲你需要陣列矢量陣列 - 它是非常複雜的結構是不是?相反,只需使用Array of Vectors,然後像現在一樣循環兩次。

//the listener class 
    Array<Vector2> lineDraws = new Array<Vector2>(); 

    ... 

    //touchDown class 
    lineDraws.add(new Vector2(screenX, screenY)); 

    projector.unproject(new Vector2(startX, startY)); 

    //consider adding some flag here to prevent two pointers touch (when holding finger, touching with another) 

    //touchUp 
    projector.unproject(new Vector2(screenX, screenY)); 
    lineDraws.add(new Vector2(screenX, screenY)); 

    ... 

    //the screen class render method 
    for(int i = 0; i < listener.lineDraws.size - 1; i+=2) 
    { 
     renderer.line(listener.lineDraws.get(i), listener.lineDraws.get(i + 1)); 

} 
+0

非常好的工作非常感謝它的工作! – Luke

+0

儘管我已經說過很好的工作,但投影機方法現在無法正常工作,任何幫助都將不勝感激 – Luke

+0

投影機方法不起作用是什麼意思?你可以附上截圖和代碼 - 最好的將是屏幕類的完整代碼? –