2013-02-20 2 views
0

Я хочу сделать небольшое небольшое приложение, в котором у вас есть 4 линии, каждая из которых имеет первую координату, расположенную где-то случайно на одной из сторон окна, а вторая координата будет следовать за мыши, так что вы получите этот эффект:Перерисовывающие линии с LWJGL

img

вы не можете увидеть курсор, но линии встретиться курсор в центре.

Моя проблема заключается в том, что я не могу заставить ее перемещать строки случайным образом. Таким образом, каждый кадр или тик или миллисекунда строк случайным образом меняют положение и удаляют предыдущие строки. После этого я хочу случайным образом изменить цвет линий, чтобы выбрать место и случайную позицию и в значительной степени дать кому угодно и эпилептическую форму, но сначала мне нужно выяснить позицию.

Я попытался выполнить некоторые команды glClear (GL _...), но они, похоже, не работают. Есть ли способ полностью очистить экран и повторить команду glBegin (GL_LINES), чтобы поместить ее в другое место?

Вот мой код:

package tests; 

import static org.lwjgl.opengl.GL11.*; 
import java.util.Random; 
import org.lwjgl.LWJGLException; 
import org.lwjgl.input.*; 
import org.lwjgl.opengl.*; 

public class game { 

int wx = 600; 
int hy = 400; 

int rx = new Random().nextInt(wx); 
int ry = new Random().nextInt(hy); 

public game() throws LWJGLException { 

    int mouseX = Mouse.getX(); 
    int mouseY = hy-Mouse.getY()-1; 

    Display.setDisplayMode(new DisplayMode(wx, hy)); 
    Display.create(); 
    Display.setTitle("Game"); 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0, wx, hy, 0, 1, -1); 
    glMatrixMode(GL_MODELVIEW); 

    while(!Display.isCloseRequested()) { 
     lines(); 

     while(Keyboard.next()) { 
      if(Keyboard.getEventKey() == Keyboard.KEY_ESCAPE) { 
       Display.destroy(); 
       System.exit(0); 
      } 
     } 

     while(Mouse.next()) { 
      if(Mouse.isButtonDown(0)) { 
       System.out.println("(" + mouseX + ", " + mouseY + ")"); 
      } 
     } 
    } 
} 

public void lines() { 

    glClear(GL_COLOR_BUFFER_BIT); 

    int mouseX = Mouse.getX(); 
    int mouseY = hy-Mouse.getY()-1; 

    glBegin(GL_LINES); 
     glVertex2i(rx, 0); 
     glVertex2i(mouseX, mouseY); 
    glEnd(); 

    glBegin(GL_LINES); 
     glVertex2i(0, ry); 
     glVertex2i(mouseX, mouseY); 
    glEnd(); 
    glBegin(GL_LINES); 
     glVertex2i(rx, hy); 
     glVertex2i(mouseX, mouseY); 
    glEnd(); 
    glBegin(GL_LINES); 
     glVertex2i(wx, ry); 
     glVertex2i(mouseX, mouseY); 
    glEnd(); 
     glLineWidth(5); 
     glColor3f(1f, 0f, 0f); 

    Display.update(); 
    Display.sync(500); 

} 


public static void main(String[] args) throws LWJGLException { 
    new game(); 
    } 
} 
+0

"но они, кажется, не работать" Что вы имеете в виду под этим? Что с ними не работает? – antonijn

+0

Я имею в виду, что они не делают того, что я хочу от них делать. То есть, избавиться от текущих линий и воссоздать новые с помощью линий(). –

+0

Итак, как выглядит ваше приложение? Нам было бы очень полезно знать. – antonijn

ответ

0

Попробуйте переместить расчет rx/ry внутри lines():

public void lines() 
{ 
    int rx = new Random().nextInt(wx); 
    int ry = new Random().nextInt(hy); 

    glClear(GL_COLOR_BUFFER_BIT); 

    int mouseX = Mouse.getX(); 
    int mouseY = hy-Mouse.getY()-1; 

    glLineWidth(5); 
    glColor3f(1f, 0f, 0f); 

    glBegin(GL_LINES); 
     glVertex2i(rx, 0); 
     glVertex2i(mouseX, mouseY); 
    glEnd(); 

    glBegin(GL_LINES); 
     glVertex2i(0, ry); 
     glVertex2i(mouseX, mouseY); 
    glEnd(); 

    glBegin(GL_LINES); 
     glVertex2i(rx, hy); 
     glVertex2i(mouseX, mouseY); 
    glEnd(); 

    glBegin(GL_LINES); 
     glVertex2i(wx, ry); 
     glVertex2i(mouseX, mouseY); 
    glEnd(); 

    Display.update(); 
    Display.sync(500); 
} 
+0

О, вау, что сработало !!! Спасибо!!! Я не хочу вслепую добавлять его, так что может объяснить, почему он работает, пожалуйста? Благодарю. –

+0

Прежде чем вы получите два случайных числа, когда 'game' был создан и никогда не менял их. Таким образом, каждый раз, когда вы рисуете, вы получаете два новых случайных числа. – genpfault

+0

О, хорошо, спасибо! Теперь я понимаю. :-) –