Я использую OpenGL. Для моих плит я использую список отображения, и я просто использую немедленное больше для своего плеера (на данный момент). Когда я перемещаю плеер, я хочу центрировать его в центре окна, но позволяю ему прыгать по оси y, а камера не следует за ним. Но проблема в том, что я не могу понять, как центрировать игрока в окне просмотра! Вот метод обновления игрок:2D-камеры переводы
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, а затем показываю плеер в его текущей позиции. Но игрок движется быстрее, чем прокрутка плитки, и он может скрыться от экрана! Как центрировать игрока с движущимися плитами?
Спасибо за помощь!
Хмм ... Я пытаюсь думать о том, что я должен делать, и я не могу понять это. Я знаю, как сделать все, кроме последнего метода, получить исходную позицию игрока, а затем добавить переменные прокрутки, а затем визуализировать с помощью вывода? Я просто не знаю. –
Еще один способ взглянуть на то, чтобы рассматривать позицию игрока как мировые координаты. Наличие координат мира немного странно. Вы должны думать о них вместо этого как координаты «камеры», и что мир имеет фиксированную систему координат. – Jherico
Хорошо ... но тогда как я на самом деле это делаю? Я думаю, что понимаю теорию, но я серьезно не знаю, как ее реализовать. –