LWJGL+ GUI - Выход из рендерного цикла для работы в GUI без потери окна - Java
Формулировка задачи:
Всем привет!
Учусь использовать OpenGL в Java. И у меня возникла небольшая проблемка, окно LWJGL запускается с гуи, и если уже запустился рендер (исполняется пока до тех пор пока не нажму Esc или пока не закрою окно), то никакие действия с ГУИ я больше не могу проводить(ведь цикл продолжается). Нужно как-небудь выйти из цикла рендера и при этом не потерять окна. Вот код:
Спасибо за совет!
public class LWJGL { private boolean boxselected = false; private List<Box> cubes = new ArrayList<Box>(16); public LWJGL() { try { Display.setDisplayMode(new DisplayMode(640, 480)); Display.setTitle("Java OpenGL program"); Display.create(); } catch (LWJGLException e) { e.printStackTrace(); } // Initialization OpenGL glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0, 640, 0, 480, 1, -1); glMatrixMode(GL_MODELVIEW); float translate_x = 0; float translate_y = 0; while (!Display.isCloseRequested()) { // Менял на while (Display.isActive()) { не помогло // Render glClear(GL11.GL_COLOR_BUFFER_BIT); glPushMatrix(); glTranslatef(translate_x, translate_y, 0); if (Keyboard.isKeyDown(Keyboard.KEY_SPACE) && Mouse.getX() > 0 && Mouse.getY() < 640 && Mouse.getY() > 0 && Mouse.getY() < 480) { translate_x+=Mouse.getDX(); translate_y+=Mouse.getDY(); } int mouseX=(int)(Mouse.getX()-translate_x); int mouseY=(int)(Mouse.getY()-translate_y); while (Keyboard.next()) { if (Keyboard.isKeyDown(Keyboard.KEY_C)) { cubes.add(new Box(mouseX, mouseY)); } if (Keyboard.isKeyDown(Keyboard.KEY_S)) { glPushMatrix(); } if (Keyboard.isKeyDown(Keyboard.KEY_L)) { glPopMatrix(); } if (Keyboard.isKeyDown(Keyboard.KEY_R)) { glLoadIdentity(); glClear(GL11.GL_COLOR_BUFFER_BIT); } } for (Box box : cubes) { if (Mouse.isButtonDown(0) && box.inbound(mouseX, mouseY) && !boxselected) { boxselected = true; box.selected = true; //System.out.println("You pressed boxXXX!"); } if (!Mouse.isButtonDown(0)) { boxselected = false; box.selected = false; } if (box.selected) { box.update(Mouse.getDX(), Mouse.getDY()); } box.draw(); } glPopMatrix(); Display.update(); Display.sync(60); if (Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)) { Display.destroy(); System.exit(0); } } Display.destroy(); System.exit(0); }
Решение задачи: «LWJGL+ GUI - Выход из рендерного цикла для работы в GUI без потери окна»
textual
Листинг программы
public void actionPerformed(ActionEvent e) { try{ if(e.getSource()==b1){ Thread paint = new Thread(new LWJGL()); paint.start(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д