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() にアクセスするにはどうすればよいですか?

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 インスタンスの 1 つをコンストラクターに渡します。あなたの場合、これは次のようになります。

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

そして、それへのあなたの呼び出しで、ちょうどnew KeyboardEventHandler(myLine);

このコード構造にもいくつかの問題があります。別のクラスを使用して小さなことを 1 つだけ行う意味がわかりません。

また、これがわからない場合は、ここに来る前にもっと読んでおくことをお勧めします。このサイトは、すでに調査済みで、解決策が見つからない質問をするためのものです。これは明らかにまったく研究されていません。

于 2012-09-15T02:14:49.580 に答える