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:
- ¿Cómo usar el sombreado de píxeles para lograr un texto suave?
- Mover la cámara alrededor de la esfera
- Cómo utilizar las cámaras LibGDX con Box2D Debug Renderers
- ¿Es AndEngine un motor de juego?
- API de la interfaz de usuario para libgdx
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):
- No se puede analizar la plantilla "Clase" Error siempre que intento abrir una nueva clase java
- For-loop en código de sombreado que trabaja con un número codificado pero no con una variable uniforme
- Android NullPointerException en $ Proxy0.equals
- Crear agua en Libgdx
- Hacer un juego en LibGDX con colisión y gravedad sin usar Box2D
- ¿Cómo obtener una "pantalla de carga" con libgdx?
- Dibujo ShapeRenderer transparente en libgdx
- ¿Cómo obtener el idioma del teléfono con libgdx?
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.
- Creación de una aplicación móvil multiplataforma para SharePoint 2013
- Cómo cambiar el tamaño predeterminado de <h1> … <h7> etiquetas en Android WebView?