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); 

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.

  • LibGDX dentro de la actividad de Android
  • Libgdx - IllegalStateException en una ubicación desconocida
  • Cómo utilizar los servicios de juegos de Google Play con LibGdx
  • LibGDX Actriz
  • Cómo cargar las fuentes del sistema en Libgdx? Principalmente para android. ¿Y cómo puedo obtener la lista de fuentes disponibles?
  • LibGDX y ScrollPane con múltiples widgets
  • Márgenes y rellenos entre elementos en LibGDX
  • LibGDX - Obtener deslizar hacia arriba o deslizar derecha, etc?
  • Libgdx ClassNotFoundException al iniciar Desktop main - Mac, IntelliJ
  • Mi anuncio de AdMob no está dibujando pero ¿está ahí? (LibGDX Admob 6.4.1)
  • ¿Cómo puedo girar rectángulos en Libgdx?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.