2

小さな OpenGL 2D ゲームをランダムに開始することにしました。問題は、キーボード入力が機能しないことです。エラーなどはありませんが、作成した小さな四角形が動きません。これが私のプレーヤークラスです:

public class Player {

 public int x = 0;
 public int y = 0;
 static int walkSpeed = 2;

 private InputHandler input;

 public Player() {
    render();
    update();

 }

 public void update(){
    input = new InputHandler();

    if (input.up) y--;
    if (input.down) y++;
    if (input.left) x--;
    if (input.right) x++;
 }

 public void render() {
    glTranslatef(x, y, 0);

    glBegin(GL_QUADS);
    glVertex2i(300, 300);// upper left
    glVertex2i(350, 300);// upper right
    glVertex2i(350, 350);// bottom right
    glVertex2i(300, 350);// bottom left
    glEnd();
 }
}

そして私の入力ハンドラ:

public class InputHandler implements KeyListener{

private boolean[] keys = new boolean[120];  
public boolean up, down, left, right, exit;

public void update(){
    up = keys[KeyEvent.VK_W];
    down = keys[KeyEvent.VK_S];
    left = keys[KeyEvent.VK_A];
    right = keys[KeyEvent.VK_D];
    exit = keys[KeyEvent.VK_ESCAPE];
}

public void keyPressed(KeyEvent e) {
    keys[e.getKeyCode()] = true;
}

public void keyReleased(KeyEvent e) {
    keys[e.getKeyCode()] = false;
}

public void keyTyped(KeyEvent e) {

}}

メインクラスでキーリスナーを次のように呼び出します。

public class Main extends Canvas{
long lastFrame;
long fps;
long lastFps;
private InputHandler key;

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

    getDelta();

    lastFps = getTime();
    key = new InputHandler();
    addKeyListener(key);

具体的には、次のコードでリスナーを追加します。

        addKeyListener(key);

私は何をすべきか?

4

1 に答える 1

0

入力イベントを処理した後、実際に描画されるように再描画イベントを発行する必要があります。

于 2012-12-24T14:10:32.130 に答える