LibGDX – Texto sobre textura en tile / tilemaps

¿Hay alguna manera de poner texto sobre una textura en un Tilemaps?

Estoy trabajando en un juego de damas y tengo que mostrar cuántas damas hay en un solo azulejo. Utilizo un TiledMap para cargar el tablero. Mi código es el siguiente:

GameScreen.java

public class GameScreen implements Screen { private TiledMap board; public GameScreen(final MyGame gam) { board = new TmxMapLoader().load("maps/tablero-64.tmx"); renderer = new OrthogonalTiledMapRenderer(board, 1/64f); boardCamera = new OrthographicCamera(); boardCamera.setToOrtho(false, WIDTH, HEIGHT); boardCamera.position.set(CENTERX, CENTERY, 0); // Added this to avoid continuous rendering Gdx.graphics.setContinuousRendering(false); Gdx.graphics.requestRendering(); } @Override public void render(float delta) { boardCamera.update(); renderer.setView(boardCamera); renderer.render(); renderer.getSpriteBatch().begin(); for (Stack checker : whiteCheckers) checker.draw(renderer.getSpriteBatch(), 1); for (Stack checker : blackCheckers) checker.draw(renderer.getSpriteBatch(), 1); renderer.getSpriteBatch().end(); } } 

Stack.java

 public class Stack extends Actor { static BitmapFont font = new BitmapFont(Gdx.files.internal("fonts/estragelo.fnt"), Gdx.files.internal("fonts/estragelo.png"), true); // Line 31 @Override public void draw(SpriteBatch batch, float parentAlpha) { batch.draw(this.texture, this.boardPosition.x, this.boardPosition.y, this.size, this.size); // This DOESN'T work font.draw(batch, "10", this.boardPosition.x, this.boardPosition.y); // Line 296 } } 

Gracias por adelantado.

EDIT: agrego el registro de errores:

 12-24 17:49:18.178: E/AndroidRuntime(3365): FATAL EXCEPTION: GLThread 12-24 17:49:18.178: E/AndroidRuntime(3365): java.lang.ExceptionInInitializerError 12-24 17:49:18.178: E/AndroidRuntime(3365): at my.package.GameScreen.<init>(GameScreen.java:81) 12-24 17:49:18.178: E/AndroidRuntime(3365): at my.package.MainMenuScreen.render(MainMenuScreen.java:36) 12-24 17:49:18.178: E/AndroidRuntime(3365): at com.badlogic.gdx.Game.render(Game.java:46) 12-24 17:49:18.178: E/AndroidRuntime(3365): at my.package.MyGame.render(MyGame.java:23) 12-24 17:49:18.178: E/AndroidRuntime(3365): at com.badlogic.gdx.backends.android.AndroidGraphics.onDrawFrame(AndroidGraphics.java:487) 12-24 17:49:18.178: E/AndroidRuntime(3365): at com.badlogic.gdx.backends.android.surfaceview.GLSurfaceViewCupcake$GLThread.guardedRun(GLSurfaceViewCupcake.java:713) 12-24 17:49:18.178: E/AndroidRuntime(3365): at com.badlogic.gdx.backends.android.surfaceview.GLSurfaceViewCupcake$GLThread.run(GLSurfaceViewCupcake.java:646) 12-24 17:49:18.178: E/AndroidRuntime(3365): Caused by: com.badlogic.gdx.utils.GdxRuntimeException: Error loading font file: fonts/estragelo.fnt 12-24 17:49:18.178: E/AndroidRuntime(3365): at com.badlogic.gdx.graphics.g2d.BitmapFont$BitmapFontData.<init>(BitmapFont.java:971) 12-24 17:49:18.178: E/AndroidRuntime(3365): at com.badlogic.gdx.graphics.g2d.BitmapFont.<init>(BitmapFont.java:135) 12-24 17:49:18.178: E/AndroidRuntime(3365): at com.badlogic.gdx.graphics.g2d.BitmapFont.<init>(BitmapFont.java:127) 12-24 17:49:18.178: E/AndroidRuntime(3365): at my.package.Stack.<clinit>(Stack.java:31) 12-24 17:49:18.178: E/AndroidRuntime(3365): ... 7 more 12-24 17:49:18.178: E/AndroidRuntime(3365): Caused by: java.lang.ArrayIndexOutOfBoundsException 12-24 17:49:18.178: E/AndroidRuntime(3365): at com.badlogic.gdx.graphics.g2d.BitmapFont$BitmapFontData.<init>(BitmapFont.java:836) 12-24 17:49:18.178: E/AndroidRuntime(3365): ... 10 more 

EDIT 2: El problema fue la fuente. La fuente Estragelo genera dos archivos PNG, pero sólo puede especificar uno en el constructor BitmapFont. Así que cambié a la fuente Arial y funciona. Pero ahora tengo el mismo problema que al principio. Esto me da el mismo resultado que hacer:

 public void draw(SpriteBatch batch, float parentAlpha) { BitmapFont font = new BitmapFont(); font.draw(batch, "10", this.boardPosition.x, this.boardPosition.y); } 

De alguna manera, está pintando el número, pero en mala posición y mal tamaño. Este es el resultado (boardPosition es (4,0) y (3,7), donde se colocan damas):

Este es el nuevo resultado

Nueva Respuesta:

Dado que su nueva fuente BitmapFont es estática, itll se cargará antes de que Gdx se inicialice. Es por eso que no funcionará. Para evitar esto, puede dejar la font campo estático en blanco y asignarla en el constructor GameScreen :

 public class Stack extends Actor { static BitmapFont font; @Override public void draw(SpriteBatch batch, float parentAlpha) { //your draw stuff } } 

Y luego asigne la fuente en el constructor:

 public class GameScreen implements Screen { public GameScreen(final MyGame gam) { //your initializers and settings Stack.font=new BitmapFont(Gdx.files.internal("fonts/estragelo.fnt"), Gdx.files.internal("fonts/estragelo.png"), true); } 

Vieja Respuesta:

Tienes que crear un BitmapFont con herramientas como Hiero o [BMFont] ( http://www.angelcode.com / products / bmfont /) para crear una fuente y usar los archivos resultantes como ese:

 font=new BitmapFont(Gdx.files.local("fonts/font.fnt"), Gdx.files.local("fonts/font.png"), true); 

En mi caso los archivos de fuentes se encuentran en una subcarpeta "fuentes" de mi área de trabajo.

En BMFont usted puede elegir el tamaño, el estilo etc de la fuente.

Editar: Debe considerar la representación no continua para el juego, porque no es necesario para un juego de mesa para volver a dibujar gráficos en cada fotograma.

  • LibGDX en la aplicación de compras y Gradle
  • Rotar TextButton con libgdx
  • Error de Google Play Services - Informe de errores Incomprensible
  • Me gustaría saber si hay una forma de poner un juego libgdx dentro de una aplicación para Android.
  • Vista de lista en Libgdx
  • Dibujar objeto personalizado curvado en LIBGDX?
  • Libgdx - cómo agregar la imagen de fondo en la etapa?
  • Dibujar una línea suave
  • LibGDX soporta 3D como Unity3D
  • ¿Cómo puedo girar rectángulos en Libgdx?
  • Gráficos Android gran consumo de memoria montón? - LibGDX
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.