Java:绘制线条Slick LWJGL OpenGL

Java:绘制线条Slick LWJGL OpenGL,java,opengl,lwjgl,Java,Opengl,Lwjgl,我正在学习如何使用OpenGL,并开始围绕Slick 2D游戏库构建一些实验,但我遇到了一些问题 我试图画简单的线,将它们存储在一个数组中,然后在该数组上迭代以渲染每条线。这是主要课程: ArrayList<Bloco> listaBlocos = new ArrayList<Bloco>(); ArrayList<Linha> listaLinhas = new ArrayList<Linha>(); boolean random = f

我正在学习如何使用OpenGL,并开始围绕Slick 2D游戏库构建一些实验,但我遇到了一些问题

我试图画简单的线,将它们存储在一个数组中,然后在该数组上迭代以渲染每条线。这是主要课程:

    ArrayList<Bloco> listaBlocos = new ArrayList<Bloco>();
ArrayList<Linha> listaLinhas = new ArrayList<Linha>();
boolean random = false;

@Override
public void init(GameContainer gc) throws SlickException {
    listaBlocos = new ArrayList<Bloco>();
    listaLinhas = new ArrayList<Linha>();
}

@Override
public void update(GameContainer gc, int delta) throws SlickException {
    Input input = gc.getInput();

    if (input.isMousePressed(0))
        listaBlocos.add(new Bloco(input.getMouseX() - 5, input.getMouseY() - 5, 10, new Color(0, 255, 0)));
    if (input.isMousePressed(1))
        listaBlocos.add(new Bloco(input.getMouseX() - 5, input.getMouseY() - 5, 10, new Color(255, 0, 0)));

    if (input.isKeyPressed(Input.KEY_A))
        if (random == false)
            random = true;
        else
            random = false;

    if (input.isKeyPressed(Input.KEY_S))
        listaLinhas.add(new Linha(input.getMouseX(), input.getMouseY(), 100, 100));

    if (input.isKeyDown(Input.KEY_D))
        listaLinhas.get(0).drawLine();

    if (!listaBlocos.isEmpty() && random)
        for (Bloco b : listaBlocos)
            b.moveRandom(delta);

}

public void render(GameContainer gc, Graphics g) throws SlickException {

    for (Linha l : listaLinhas)
        l.drawLine();

    for (Bloco b : listaBlocos)
        b.draw(g);

}
}


这只是为了测试,如果有更好的方法来渲染一堆线,请告诉我。问题是这些线条在屏幕上闪烁,它们并不总是全彩的。我已经记录了问题,以便您可以看到发生了什么

我猜您在渲染中看到了一些奇怪之处,因为您没有限制FPS

AppGameContainer gameContainer = new AppGameContainer(new Game("My Game"));
gameContainer.setTargetFrameRate(30);
对FPS没有限制可能会导致
update
方法的调用间隔不够长,因为游戏调用
render
方法的频率太高

AppGameContainer gameContainer = new AppGameContainer(new Game("My Game"));
gameContainer.setTargetFrameRate(30);