我试图允许玩家点击按住然后拖动并放开,这将完成从你点击的地方到你放手的地方画一条线。但是我似乎无法弄清楚如何保持渲染的线条。每次单击拖动然后放开它都会正确绘制线条,然后在尝试绘制另一条线时消失。这是输入侦听器的代码,它获取位置
@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
是一个Vector2
size 2
的数组,因此您可以添加点击的位置和放开的位置,然后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
是这样它将绘制前两个坐标然后是下两个坐标。非常感谢任何帮助!
答案 0 :(得分:1)
首先使用Array<> libgdx类而不是ArrayList - 它更方便。
您的问题似乎是 touchDown 和 touchUp 方法。每次你改变
的值 buttonPositions[0].x
buttonPositions[0].y
buttonPositions[1].x
buttonPositions[1].y
因此,即使您将其添加到集合,您也会覆盖前一个。
此外,我认为你不需要数组矢量数组 - 这是非常复杂的结构吗?相反,只使用数组向量,然后像现在一样进行2到2的迭代。
//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));
}