【问题标题】:LWJGL method with keyboard input does not work in game loop带有键盘输入的 LWJGL 方法在游戏循环中不起作用
【发布时间】:2016-11-16 18:41:21
【问题描述】:

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

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

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;
    } 

这是游戏循环所在的主要构造函数。我有一些实例是 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();
}

【问题讨论】:

    标签: java methods lwjgl


    【解决方案1】:

    静态方法属于类,不属于对象。如果您想访问静态方法中的非静态字段,例如 x、y、速度……它会给您一个错误。但是您实际上在这里所做的是将几个参数传递给您的 move 方法,该方法与它们一起做一些事情并不重要,因为这只会修改您方法中的那些副本。

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

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

    您甚至不必只传递 delta time 参数,因为每个方形对象都有自己的副本(如果不是静态的),并且 move 将使用这些副本。

    【讨论】:

    • 很高兴能帮上忙。 @天使加西亚
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 2014-05-08
    相关资源
    最近更新 更多