繁体   English   中英

Java LWJGL闪烁状态

[英]Java LWJGL blinking states

我有一个问题,当我按下Return键时,在INTRO状态(默认)下,它必须切换到GAME状态。 可以,但是如果这样做,它会在INTRO和GAME状态之间闪烁。 文本闪烁,底部的栏闪烁。

我试图打印出当前状态,似乎在这两个状态之间没有变化,但是当我运行该应用程序时,我的INTRO状态和GAME状态都在那里,并且正在闪烁。

public Renderer() {
    try {
        Display.setDisplayMode(new DisplayMode(screenWidth, screenHeight));
        Display.setTitle(gameTitle);
        Display.create();
    } catch (LWJGLException e) {
        e.printStackTrace();
        System.exit(0);
    }

    GL11.glMatrixMode(GL11.GL_PROJECTION);
    GL11.glLoadIdentity();
    GL11.glOrtho(0, 640, 0, 480, 1, -1);
    GL11.glMatrixMode(GL11.GL_MODELVIEW);

    lastFrame = getTime();


    while (!Display.isCloseRequested()) {
        //long delta = (long) getDelta();

        System.out.println(state);

        while (Keyboard.next()) {
            if(Keyboard.isKeyDown(Keyboard.KEY_RETURN)) {
                if(state == State.INTRO) {
                    clearCanvas();
                    state = State.GAME;
                }
            }
            if(Keyboard.isKeyDown(Keyboard.KEY_BACK)) {
                if(state == State.GAME) {
                    clearCanvas();
                    state = State.INTRO;
                }
            }
        }

        switch (state) {
        case INTRO:
            GL11.glColor3f(1.0f, 1.0f, 1.0f);
            TextDraw.drawString("PRESS 'RETURN' TO START GAME, and then hit CTRL z", Display.getWidth() / 2 - 160, Display.getHeight() / 2);
            TextDraw.drawString("CONTROLS:", Display.getWidth() / 2 - 30, Display.getHeight() / 2 - 50);
            TextDraw.drawString("1 key is Paint Red", Display.getWidth() / 2 - 70, Display.getHeight() / 2 - 70);
            TextDraw.drawString("2 key is Paint Green", Display.getWidth() / 2 - 70, Display.getHeight() / 2 - 85);
            TextDraw.drawString("3 key is Paint Blue", Display.getWidth() / 2 - 70, Display.getHeight() / 2 - 100);
            TextDraw.drawString("CTRL Z is Clear canvas", Display.getWidth() / 2 - 70, Display.getHeight() / 2 - 115);
            TextDraw.drawString("Escape to Close Program", Display.getWidth() / 2 - 70, Display.getHeight() / 2 - 130);
            break;
        case GAME:
            keyBindings();
            int MouseX = Mouse.getX();
            int MouseY = Mouse.getY();
            paint(MouseX, MouseY);
            break;
        }

        Display.update();
        Display.sync(250);
    }

    //Closed
    System.out.println("Program Closed");
    Display.destroy();
    System.exit(0);

}

尝试更换以下部件:

while (Keyboard.next()) {
        if(Keyboard.isKeyDown(Keyboard.KEY_RETURN)) {
            if(state == State.INTRO) {
                clearCanvas();
                state = State.GAME;
            }
        }
        if(Keyboard.isKeyDown(Keyboard.KEY_BACK)) {
            if(state == State.GAME) {
                clearCanvas();
                state = State.INTRO;
            }
        }
    }

有了这个:

if (Keyboard.isKeyDown(Keyboard.KEY_RETURN)){
    clearCanvas(); //Don't check for the state which is going to be true most likely, just adds confusion to coding
    state = State.GAME;
}

if (Keyboard.isKeyDown(Keyboard.KEY_BACK)){
    clearCanvas();
    state = State.INTRO;
}

如果您担心没有按任何键就可以提高速度,请不要担心。 差异确实很小,并且很可能不会引起注意。

另外,您不会清除屏幕! 没有这些,各种残留物都可以留在那里! 使用此方法在主循环中清除:

while (!Display.isCloseRequested()){
    GL11.glClear(GL_COLOR_BUFFER_BIT);
    //Rest of your code here
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM