libgdx ¿por qué la cámara no sigue el personaje?

Soy nuevo con libgdx y he leído un Tutorial (el Tutorial Code es mi base). Tengo un personaje que me puedo mover, pero la cámara no seguirá el carácter 🙁

Aquí está mi WorldRenderer.java:

package com.evolutio.tee.view; import com.evolutio.tee.model.Block; import com.evolutio.tee.model.Tee; import com.evolutio.tee.model.World; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType; import com.badlogic.gdx.math.Rectangle; public class WorldRenderer { private static final float CAMERA_WIDTH = 10f; private static final float CAMERA_HEIGHT = 7f; private World world; private OrthographicCamera cam; /** for debug rendering **/ ShapeRenderer debugRenderer = new ShapeRenderer(); /** Textures **/ private Texture teeTexture; private Texture blockTexture; private SpriteBatch spriteBatch; private boolean debug = false; private int width; private int height; private float ppuX; // pixels per unit on the X axis private float ppuY; // pixels per unit on the Y axis public void setSize (int w, int h) { this.width = w; this.height = h; ppuX = (float)width / CAMERA_WIDTH; ppuY = (float)height / CAMERA_HEIGHT; } public WorldRenderer(World world, boolean debug) { Tee tee = world.getTee(); this.world = world; cam = new OrthographicCamera(CAMERA_WIDTH, CAMERA_HEIGHT); cam.position.set(CAMERA_WIDTH / 2f, CAMERA_HEIGHT / 2f, 0); cam.update(); this.debug = debug; spriteBatch = new SpriteBatch(); loadTextures(); } private void loadTextures() { teeTexture = new Texture(Gdx.files.internal("tee/tee.png")); blockTexture = new Texture(Gdx.files.internal("world/dreck.png")); } public void render() { spriteBatch.begin(); drawBlocks(); drawTee(); spriteBatch.end(); //if (debug) drawDebug(); } private void drawBlocks() { for (Block block : world.getBlocks()) { spriteBatch.draw(blockTexture, block.getPosition().x * ppuX, block.getPosition().y * ppuY, Block.SIZE * ppuX, Block.SIZE * ppuY); } } private void drawTee() { Tee tee = world.getTee(); spriteBatch.draw(teeTexture, tee.getPosition().x * ppuX, tee.getPosition().y * ppuY, Tee.SIZE * ppuX, Tee.SIZE * ppuY); cam.position.set(tee.getPosition().x, tee.getPosition().y, 0); } private void drawDebug() { // render blocks debugRenderer.setProjectionMatrix(cam.combined); debugRenderer.begin(ShapeType.Rectangle); for (Block block : world.getBlocks()) { Rectangle rect = block.getBounds(); float x1 = block.getPosition().x + rect.x; float y1 = block.getPosition().y + rect.y; debugRenderer.setColor(new Color(1, 0, 0, 1)); debugRenderer.rect(x1, y1, rect.width, rect.height); } // render Tee Tee tee = world.getTee(); Rectangle rect = tee.getBounds(); float x1 = tee.getPosition().x + rect.x; float y1 = tee.getPosition().y + rect.y; debugRenderer.setColor(new Color(0, 1, 0, 1)); debugRenderer.rect(x1, y1, rect.width, rect.height); debugRenderer.end(); } } 

en drawTee () Trato de hacer que la cámara siga la Tee.

 cam.position.set(tee.getPosition().x, tee.getPosition().y, 0); 

One Solution collect form web for “libgdx ¿por qué la cámara no sigue el personaje?”

Prueba esto

 public class WorldRenderer { private static final float CAMERA_WIDTH = 10f; private static final float CAMERA_HEIGHT = 7f; private World world; private OrthographicCamera cam; /** for debug rendering **/ ShapeRenderer debugRenderer = new ShapeRenderer(); /** Textures **/ private Texture teeTexture; private Texture blockTexture; private SpriteBatch spriteBatch; private boolean debug = false; private int width; private int height; private float ppuX; // pixels per unit on the X axis private float ppuY; // pixels per unit on the Y axis public void setSize (int w, int h) { this.width = w; this.height = h; ppuX = (float)width / CAMERA_WIDTH; ppuY = (float)height / CAMERA_HEIGHT; } public WorldRenderer(World world, boolean debug) { Tee tee = world.getTee(); this.world = world; this.cam = new OrthographicCamera(CAMERA_WIDTH, CAMERA_HEIGHT); this.cam.setToOrtho(false,CAMERA_WIDTH,CAMERA_HEIGHT); this.cam.position.set(CAMERA_WIDTH / 2f, CAMERA_HEIGHT / 2f, 0); this.cam.update(); this.debug = debug; spriteBatch = new SpriteBatch(); loadTextures(); } private void loadTextures() { teeTexture = new Texture(Gdx.files.internal("tee/tee.png")); blockTexture = new Texture(Gdx.files.internal("world/dreck.png")); } public void render() { moveCamera(tee.getPosition().x, CAMERA_HEIGHT / 2); spriteBatch.setProjectionMatrix(cam.combined); spriteBatch.begin(); drawBlocks(); drawTee(); spriteBatch.end(); //if (debug) drawDebug(); } public void moveCamera(float x,float y){ if ((tee.getPosition().x > CAMERA_WIDTH / 2)) { cam.position.set(x, y, 0); cam.update(); } } private void drawBlocks() { for (Block block : world.getBlocks()) { spriteBatch.draw(blockTexture, block.getPosition().x, block.getPosition().y, Block.SIZE, Block.SIZE); } } private void drawTee() { Tee tee = world.getTee(); spriteBatch.draw(teeTexture, tee.getPosition().x, tee.getPosition().y, Tee.SIZE, Tee.SIZE); } 

Utilizar el sprite.setProjectionMatrix (cam.combined) antes de que spriteBatch.begin () sea necesario porque si no lo hace el spriteBatch utiliza su propia cámara, por lo tanto sus actualizaciones no hacen nada por lo que aparece en la pantalla. Tienes que sacar el ppuX, ppuY cosas. Sé que es para cambiar el tamaño de la pantalla de los diferentes dispositivos, pero se atornilla a la cámara, por lo tanto, si usted lo mantiene en y llamar a la setProjectionMatrix, será manera de zoom (en realidad el tamaño de todas las imágenes será enorme.

  • Cómo portar el juego libgdx COMPLETADO de Android a iOS
  • API de la interfaz de usuario para libgdx
  • Conexión de dos dispositivos mediante libgdx
  • Android: mover a la ubicación de toque después del lanzamiento con libgdx / universal-tween-engine
  • Scene2d cómo manejar actor tocado (LibGDX)
  • Libgdx Etiqueta de texto de varias líneas de altura
  • Procesamiento lento de lotes de modelos en libGDX
  • Cómo sincronizar Play Services Multijugador en tiempo real
  • Pase ArrayList desde el módulo android a núcleo en libgdx
  • Cómo detectar cuando el dispositivo está orientado al revés en libGDX
  • Cómo dibujar la clase Button en libgdx
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.