我正在使用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();
}
}
绘制正方形有什么问题?
答案 0 :(得分:1)
您的addSquare
方法实际上没有添加正方形,它会绘制一个正方形。它仅在每个空间按下一帧时可见,因为您检查的键事件仅在首次按下空格键时发生一次。如果您将getInput
方法的正文更改为:
if(Keyboard.isKeyDown(Keyboard.KEY_SPACE)){
addSquare(0.3f, 0.4f, 0.7f, 1f);
}
每个框架都会画一个正方形,空格键被按住。