Java: Рисование линий Slick LWJGL OpenGL

Я изучаю, как использовать OpenGL и начинаю проводить эксперименты с библиотекой Slick 2D Game, но столкнулся с несколькими проблемами.

Я пытаюсь рисовать простые линии, сохранять их в массиве, а затем перебирать этот массив для отображения каждой отдельной строки. Это основной класс:

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

}

А это класс Linha (он расширяет Line):

public class Linha extends Line {

public Linha(float x1, float y1, float x2, float y2) {
    super(x1, y1, x2, y2);
}

public void drawLine() {

    GL11.glColor3f(1.0f, 1.0f, 1.0f);
    GL11.glBegin(GL11.GL_LINES);
    GL11.glLineWidth(5.0f);
    GL11.glVertex2f(getX1(), getY1());
    GL11.glVertex2f(getX2(), getY2());
    GL11.glEnd();
}

}

Это было просто для тестирования, если есть лучший способ отрисовать кучу строк, пожалуйста, скажите мне. Проблема в том, что линии мигают на экране, они не всегда полноцветные. Я записал проблему, чтобы вы могли видеть, что происходит http://www.youtube.com/watch?v=ymO00yb5NVE


person andrepcg    schedule 09.07.2012    source источник


Ответы (1)


Я предполагаю, что вы видите странности в вашем рендеринге, потому что вы не ограничили свой FPS.

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

Отсутствие ограничения на FPS может привести к тому, что ваш метод update не будет вызываться через достаточно регулярные промежутки времени, потому что ваша игра слишком часто вызывает метод render.

person Jesse Webb    schedule 09.07.2012