2016-11-16 7 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

関連する問題