2016-11-16 62 views
1

我正在嘗試在java中製作遊戲,並且使用LWJGL。所以我可以使用箭頭鍵在屏幕四周移動一個四邊形,它的工作原理非常好。雖然代碼是在Main構造函數中,但它看起來不太好。所以我決定把它放在一個方法中,並調用Main構造函數中的方法來在構造函數中保存一些空間。但是,當我將代碼放入方法中並調用它時,該函數不起作用。按下箭頭鍵時,立方體不會移動。鍵盤輸入的LWJGL方法在遊戲循環中不起作用

這是我的招法(在主構造函數調用時沒有做任何事情):

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

回答

0

靜態方法屬於類,而不屬於對象。如果你想在你的靜態方法(如x,y,speed)中訪問一個非靜態字段,它會給你一個錯誤。但是你實際上在這裏做的是將一些參數傳遞給你的移動方法,它與它們做一些事情並不重要,因爲它只會修改你的方法中的這些副本。

假設你有一個Square類和你想它不應該是靜態的舉動方法移動

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

你甚至不用來傳遞參數僅增量時間,因爲每一個方形物體將擁有自己的副本(如果不是靜態的),移動將使用這些副本。

+0

再次非常感謝你的工作! @eldo –

+0

我很高興我能幫上忙。 @天使加西亞 – eldo