타일 맵의 텍스처 위에 텍스트를 삽입 할 수있는 방법이 있습니까?LibGDX - 타일/타일 맵의 텍스처 오버 텍스트
나는 체커 기반의 게임에서 일하고 있는데, 얼마나 많은 체커가 하나의 타일에 있는지 보여줄 필요가있다. 나는 TiledMap을 사용하여 보드를로드합니다.
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
}
}
감사 : 내 코드는 다음을합니다.
편집 :
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
편집 2 : 나는 오류 로그를 추가하는 문제는 글꼴했다. Estragelo 글꼴은 두 개의 PNG 파일을 생성하지만 BitmapFont 생성자에서만 지정할 수 있습니다. 그래서 나는 Arial 폰트로 바꿨다. 하지만 지금은 처음과 같은 문제가 있습니다. 이것은 다음과 같은 결과를줍니다.
public void draw(SpriteBatch batch, float parentAlpha) {
BitmapFont font = new BitmapFont();
font.draw(batch, "10", this.boardPosition.x, this.boardPosition.y);
}
어떤 식 으로든 나쁜 위치와 나쁜 크기로 숫자를 그립니다. 이것은 (체커가 배치됩니다 (3,7), boardPosition는 (4,0이다) 등) 결과 :
는
작동하지 않음 ** Gdx.files.local (**) ** _GdxFileNotFoundException_ 및 ** Gdx.files.internal (...) **을 수신합니다. _ArrayIndexOutOfBoundsException_을 수신합니다.이것은 내 코드입니다 : 'BitmapFont font = new BitmapFont (Gdx.files.internal ("fonts/EstrageloEdessa.fnt"), Gdx.files.internal ("fonts/EstrageloEdessa_0.png"), true); font.draw (배치, "10", this.boardPosition.x, this.boardPosition.y); ' – David
나는 모든 렌더주기마다 새로운'BitmapFont'를 만들기 때문에 그렇게 생각합니다. SpriteBatch가 Font를 생성 할 때마다 새로운 Texture를 추가 할 수 있기 때문에 모든 렌더링주기가 가능합니다 ... 모든 Stack 객체에 대해 동일한 글꼴을 사용하기 때문에 글꼴을 정적으로 만들어야합니다 모든 스택 객체) : 'public class Stack 확장 Actor { static BitmapFont font = new BitmapFont (bla, bla, bla); @Override public void draw (SpriteBatch 일괄 처리, parentAlpha) {// 무언가를 그립니다}} – tly
오류가 발생했습니다. 설명을 변경하고 오류 로그를 추가했습니다. – David