带键盘输入的LWJGL方法在游戏循环中不起作用

时间:2016-11-16 18:41:22

标签: java methods lwjgl

我正在尝试用java制作游戏,而我正在使用LWJGL。因此,我可以使用箭头键在屏幕上移动四边形,它非常好用。虽然它的代码在Main构造函数中,但它看起来不太好。所以我决定将它放在一个方法中并在Main构造函数中调用该方法以在构造函数中保存一些空间。但是,当我将代码放入方法并调用它时,该函数不起作用。当我按下箭头键时,立方体不会移动。

这是我的移动方法(在主构造函数中调用时不执行任何操作):

public static void moveSquare(float x, float y, float speed, int deltaTime){
    if(Keyboard.isKeyDown(Keyboard.KEY_RIGHT)){
        x += speed * deltaTime;
    } 
    if(Keyboard.isKeyDown(Keyboard.KEY_LEFT)){
        x -= speed * deltaTime;
    }
    if(Keyboard.isKeyDown(Keyboard.KEY_UP)){
        y -= speed * deltaTime;
    }
    if(Keyboard.isKeyDown(Keyboard.KEY_DOWN)){
        y += speed * deltaTime;
    } 

这是游戏循环所在的Main构造函数。我有的一些实例是float x,float y,float speed,int width和int height。以防你在代码中看到它们被引用并想知道它们来自何处。

public Main(){
    Display.setTitle("Squares!");
    try {
        Display.setDisplayMode(new DisplayMode(800,600));
        Display.create();
    } catch (LWJGLException e) {
        e.printStackTrace();
    }

    initGL();

    while(!Display.isCloseRequested()){

        int deltaTime = getDelta();

        drawSquare(x, y, width, height);
        moveSquare(x, y, speed, deltaTime);

        initClock();
        Display.update();
        GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
        Display.sync(64); 
    } 

    Display.destroy();
}

1 个答案:

答案 0 :(得分:0)

静态方法属于类,而不属于对象。如果你想访问静态方法中的非静态字段,如x,y,speed ......它会给你一个错误。但是你在这里做的是将一些参数传递给你的移动方法,这对他们做了一些事情并不重要,因为那只会修改你方法中的那些副本。

我们假设您有一个Square类,并且您希望使用不应该是静态的移动方法移动它

public void move(float dt){
    //move stuff here
}

你甚至不必仅传递参数delta时间,因为每个方形对象都有自己的副本(如果不是静态的),move将使用它们。