0

这是我的名为“Main.java”的主类的代码:

import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;

import static org.lwjgl.opengl.GL11.*;

public class Main{
    public static void main(String[] args){
        try{
            Display.setDisplayMode(new DisplayMode(640, 480));
            Display.setTitle("LWJGL TESTING");
            Display.create();
        }catch (LWJGLException e){
            e.printStackTrace();
            Display.destroy();
            System.exit(1);
        }

        glMatrixMode(GL_PROJECTION);
        glOrtho(0, 640, 480, 0, 1, -1);
        glMatrixMode(GL_MODELVIEW);

        while (!Display.isCloseRequested()){
            glClear(GL_COLOR_BUFFER_BIT);
            new KeyboardEventHandler();
            Line line1 = new Line(100, 100, 200, 200, 1);
            Line line2 = new Line(400, 0, 400, 100, 2);
            Display.update();
            Display.sync(60);
        }
        Display.destroy();
        System.exit(0);
    }
}

这是名为“KeyboardEventHandler.java”的 KeyboardEventHandler 类的代码:

import org.lwjgl.input.Keyboard;


public class KeyboardEventHandler extends Main{
    public KeyboardEventHandler(){
        if(Keyboard.isKeyDown(Keyboard.KEY_LEFT)){

        }
    }
}

这是我的名为“Line.java”的课程:

import static org.lwjgl.opengl.GL11.*;

import org.lwjgl.opengl.*;
import org.lwjgl.*;
import org.lwjgl.opengl.GL11;

public class Line {
    int id;
    public Line(int startx, int starty, int endx, int endy, int startingid){
        glBegin(GL_LINE_STRIP);
            glVertex2i(startx, starty);
            glVertex2i(endx, endy);
        glEnd();
        id = startingid;
    }
    public int getLineId(){
        return id;
    }
}

如何从 KeyboardEventHandler 类访问“line1”行的方法 getLineId(),我对 Java 相当陌生,所以如果这是一个明显的答案,我很抱歉。

4

2 回答 2

1

您可以将 line 传递给 KeyboardEventHandler 构造函数。

//New KeyboardEventHandler
import org.lwjgl.input.Keyboard;

public class KeyboardEventHandler extends Main{
    public KeyboardEventHandler(Line passedLine /* Passing the Line object*/){
        if(Keyboard.isKeyDown(Keyboard.KEY_LEFT)){
            int lineID = passedLine.getLineId();
        }
    }
}

然后在你的主课上

/*Section from Main class*/
while (!Display.isCloseRequested()){
    glClear(GL_COLOR_BUFFER_BIT);
    Line line1 = new Line(100, 100, 200, 200, 1);
    //Pass line into keyboard event handler\\
    new KeyboardEventHandler(line1);
    Line line2 = new Line(400, 0, 400, 100, 2);
    //Pass line into keyboard event handler\\
    new KeyboardEventHandler(line2);
    Display.update();
    Display.sync(60);
}
于 2012-09-15T02:14:35.333 回答
0

要调用该方法,只需使用 a.来表示实例(line1 或 line2)内的字段或方法 (getLineId)。要将其提供给其他类,请将您的 Line 实例之一传递给构造函数。对你来说,这将是:

    public class KeyboardEventHandler extends Main{
        public KeyboardEventHandler(Line line){
            if(Keyboard.isKeyDown(Keyboard.KEY_LEFT)){
                int line1Id = line1.getLineId();
            }
        }
    }

在你的召唤中,做new KeyboardEventHandler(myLine);

这个代码结构也有一些问题,我什至看不到在那里使用另一个类只做一件小事的意义。

另外,如果您不知道这一点,我建议您在来这里之前阅读更多内容。这个网站是用来问已经研究过的问题,但没有找到解决方案。这显然根本没有被研究过。

于 2012-09-15T02:14:49.580 回答