私は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 変数に従ってタイルを移動し、プレーヤーを現在の位置にレンダリングします。しかし、プレイヤーはタイルがスクロールするよりも速く移動し、画面の端から逃げることができます! 動くタイルでプレーヤーを中央に配置するにはどうすればよいですか?
助けてくれてありがとう!