Java:绘制线条 Slick LWJGL OpenGL

标签 java opengl lwjgl

我正在学习如何使用 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);

}

这是 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

最佳答案

我猜你在渲染中看到了奇怪的地方,因为你没有限制你的 FPS。

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

对您的 FPS 没有限制可能会导致您的 update 方法无法以足够规律的间隔调用,因为您的游戏过于频繁地调用 render 方法。

关于Java:绘制线条 Slick LWJGL OpenGL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11397738/

相关文章:

java - 谷歌应用程序引擎 (java) - 在数据存储上存储 url 图像

linux - FPS 游戏和 OpenGL

java.lang.NoSuchMethodError : getPointer

将 lwjgl 与 gradle 一起使用时出现 java.lang.UnsatisfiedLinkError

java - 创建供应商中立的 EJB3 客户端

java - 使用 join 和 InterruptedException 确定线程状态?

Java 通过单击按钮打开一个新窗口

c - Quake2中qglTexImage2D的第三种internalFormat

c# - Xamarin 中的跨平台 OpenGL 渲染

linux - LWJGL - OpenGL 不渲染