0

4行ある小さなアプリケーションを作成したいのですが、それぞれに最初の座標がウィンドウの片側にランダムに設定され、2番目の座標がマウスに追従するため、この効果が得られます。

画像

カーソルは見えませんが、線は中央でカーソルと一致しています。

私の問題は、行をランダムに動かし続けることができないことです。そのため、フレームごと、ティックごと、またはミリ秒ごとに、行の位置がランダムに変更され、前の行が削除されます。この後、線の色をランダムに変更して、場所とランダムな位置を選択し、誰でもてんかんにフィットするようにしますが、最初に位置を把握する必要があります。

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();
    }
}
4

1 に答える 1

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);
}
于 2013-02-20T15:52:39.463 に答える