LWJGL键盘输入没有调用方法在显示屏上绘图?

时间:2014-07-28 20:14:56

标签: java eclipse lwjgl

我正在使用LWJGL,问题是,在调用键盘输入部分中的addSqaure()方法后,我无法在屏幕上绘制正方形。我将代码从addSquare()方法内部移动到更新部分只是为了确保它确实有效,而且确实如此。它特定于键盘方法。当我按下 SPACE 时,它只会打印出预期的文本。

这是我的代码。

import org.lwjgl.LWJGLException;
import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import static org.lwjgl.opengl.GL11.*;

public class MainClass {

    public static void initDisplay()
    {
        try
        {   
            Display.setDisplayMode(new DisplayMode(800, 600));
            Display.setTitle("sqaure addddder");
            Display.create();
        }
        catch(LWJGLException e)
        {
            e.printStackTrace();
            System.exit(0);
        }
    }

    public static void initGL()
    {
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(0, 800, 0, 600, 1, -1);
        glMatrixMode(GL_MODELVIEW);

        glClearColor(0,0,0,1);
    }

    public static void gameLoop()
    {
        while(!Display.isCloseRequested())
        {
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

            getInput();

            Display.update();
        }
    }

    public static void getInput()
    {
        while(Keyboard.next())
        {
            if(Keyboard.getEventKeyState())
            {
                if(Keyboard.getEventKey() == Keyboard.KEY_SPACE)
                {
                    addSquare(0.3f, 0.4f, 0.7f, 1f);
                    System.out.println("Square was addedd at point.");
                }else{
                    System.out.println("Square was not added.");
                }
            }
        }   
    }

    public static void addSquare(float red, float green, float blue, float alpha)
    {
        glColor4f(red, green, blue, alpha);

        glBegin(GL_QUADS);
            glVertex2f(200, 200);
            glVertex2f(300 ,200);
            glVertex2f(300, 300);
            glVertex2f(200, 300);
        glEnd();
    }

    public static void callJanitor()
    {
        Display.destroy();
        System.exit(0);
    }

    public static void main(String[] args) {

        initDisplay();
        initGL();
        gameLoop();
        callJanitor();
    }
}

绘制正方形有什么问题?

1 个答案:

答案 0 :(得分:1)

您的addSquare方法实际上没有添加正方形,它会绘制一个正方形。它仅在每个空间按下一帧时可见,因为您检查的键事件仅在首次按下空格键时发生一次。如果您将getInput方法的正文更改为:

if(Keyboard.isKeyDown(Keyboard.KEY_SPACE)){
    addSquare(0.3f, 0.4f, 0.7f, 1f);
}

每个框架都会画一个正方形,空格键被按住。