gpt4 book ai didi

java - 通过单击和取消单击 libgdx java 渲染多行

转载 作者:行者123 更新时间:2023-12-01 11:04:28 26 4
gpt4 key购买 nike

我试图让玩家单击按住然后拖动并放开,这将完成从您单击的位置到您放开的位置绘制一条线。但是我似乎不知道如何保持线条的渲染。每次您单击拖动并松开时,它都会正确绘制线条,然后如果您尝试绘制另一条线条,它就会消失。这是我的输入监听器代码,它获取位置

    @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大小为 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 是这样,它会绘制前两个坐标,然后绘制接下来的两个坐标。非常感谢任何帮助!

最佳答案

首先使用Array<> libgdx 类而不是 ArrayList - 它更方便。

您的问题似乎出在 touchDowntouchUp 方法中。每次改变值时

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

因此,即使您将其添加到集合中您也会覆盖前一个

另外,我认为您不需要 vector 数组的数组 - 这是相当复杂的结构,不是吗?相反,只使用 vector 数组,然后像现在一样进行两两迭代。

    //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));

}

关于java - 通过单击和取消单击 libgdx java 渲染多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33087454/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com