0

私はOpenGLを使用しています。私のタイルでは、表示リストを使用しており、プレーヤーには即時追加を使用しています (今のところ)。プレイヤーを動かすとき、ウィンドウの中心にプレイヤーを配置したいのですが、プレイヤーが y 軸上でジャンプできるようにし、カメラをプレイヤーに追従させないようにします。しかし問題は、プレイヤーをビューポートの中央に配置する方法がわからないことです! プレーヤーの更新方法は次のとおりです。

public void update() {
    if (Keyboard.isKeyDown(Keyboard.KEY_D)) {
        World.scrollx -= Constants.scrollSpeed;
        setCurrentSprite(Sprite.PLAYER_RIGHT);
    }
    if (Keyboard.isKeyDown(Keyboard.KEY_A)) {
        World.scrollx += Constants.scrollSpeed;
        setCurrentSprite(Sprite.PLAYER_LEFT);
    }
    move((Constants.WIDTH) / 2  + -World.scrollx, getY());
}

World.scrollx と World.scrolly は、タイルを移動するために増減する変数です。move() はプレイヤーの位置を設定するメソッドであり、他には何もありません。次のように、現在の座標でプレーヤーをレンダリングします。

public void render() {
    glBegin(GL_QUADS);
    Shape.renderSprite(getX(), getY(), getCurrentSprite());
    glEnd();
}

Shape.renderSprite は次のとおりです。

public static void renderSprite(float x, float y, Sprite sprite){
    glTexCoord2f(sprite.x, sprite.y + Spritesheet.tiles.uniformSize());
    glVertex2f(x, y);
    glTexCoord2f(sprite.x + Spritesheet.tiles.uniformSize() , sprite.y + Spritesheet.tiles.uniformSize());
    glVertex2f(x + Constants.PLAYER_WIDTH, y);
    glTexCoord2f(sprite.x + Spritesheet.tiles.uniformSize(), sprite.y);
    glVertex2f(x + Constants.PLAYER_WIDTH, y + Constants.PLAYER_HEIGHT);
    glTexCoord2f(sprite.x, sprite.y);
    glVertex2f(x, y + Constants.PLAYER_HEIGHT);
}

非常に単純です。現在のプレーヤーの位置にクワッドをレンダリングするだけです。これは私が実際にすべてをレンダリングする方法です:

public void render(float scrollx, float scrolly) {
    Spritesheet.tiles.bind();
    glPushMatrix();
    glTranslatef(scrollx, scrolly, 0);
    glCallList(tileID);
    glPopMatrix();
    player.render();
}

これは私が混乱している部分です。scrollx 変数と scrolly 変数に従ってタイルを移動し、プレーヤーを現在の位置にレンダリングします。しかし、プレイヤーはタイルがスクロールするよりも速く移動し、画面の端から逃げることができます! 動くタイルでプレーヤーを中央に配置するにはどうすればよいですか?

助けてくれてありがとう!

4

1 に答える 1