【问题标题】:Drawing a font within a Scene within a Screen for Libgdx在 Libgdx 的屏幕中的场景中绘制字体
【发布时间】:2014-07-15 20:47:31
【问题描述】:

我正在尝试创建一个将一些文本绘制到屏幕上的 Actor。这个演员在一个屏幕内。我的主要课程很简单:

package com.culture.jamiefearon;
import com.badlogic.gdx.Game;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;

public class Culture extends Game {
   public SpriteBatch batch;
   public BitmapFont font;

   public void create () {
       batch = new SpriteBatch();
       font = new BitmapFont(); // Use LibGDX's default Arial font.

       // Start the introScreen.
       this.setScreen(new IntroScreen(this));
   }
   public void render () {
      super.render();
   }
   public void dispose() {
      batch.dispose();
      font.dispose();
   }

}

而我的屏幕类定义为:

package com.culture.jamiefearon;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;

public class IntroScreen implements Screen {

final Culture game;
OrthographicCamera camera;
private int viewWidth = 800;
private int viewHeight = 480;
private Stage stage;

public class MyActor extends Actor {
    public void draw(SpriteBatch batch, float parentAlpha){
        batch = game.batch;
        game.font.draw(batch, "Culture", viewWidth / 2, viewHeight / 2);
    }
}

public void create() {        
    stage = new Stage();
    MyActor myActor = new MyActor();
    stage.addActor(myActor);
}


public IntroScreen(final Culture gam) {
    game = gam;
    camera = new OrthographicCamera();
    camera.setToOrtho(false, viewWidth, viewHeight);
}

public void render(float delta) {
    Gdx.gl.glClearColor(0, 0, 0.2f, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    camera.update();
    game.batch.setProjectionMatrix(camera.combined);
    stage.draw();
}

@Override
public void resize(int width, int height) {
}

@Override
public void show() {

}

@Override
public void hide() {
}

@Override
public void pause() {
}

@Override
public void resume() {
}

@Override
public void dispose() {

}
}

当我运行程序时,游戏就崩溃了。

【问题讨论】:

  • 有错误信息吗?如果是的话,你能把它贴在这里吗?

标签: java libgdx


【解决方案1】:

您在没有 SpriteBatch 的情况下实例化了一个舞台,因此它创建了自己的舞台。然后您的 MyActor 会忽略该 SpriteBatch 并尝试使用来自 game 的那个,它还没有调用过 begin()

相反,您的 Stage 应该使用来自 game 的 SpriteBatch 进行实例化,而 MyActor 应该只使用传递给其 draw 方法的 batch

这可能不是您遇到的崩溃,但您没有发布堆栈跟踪。

【讨论】:

    【解决方案2】:

    从未调用过 IntroScreen 的 create 方法,因此 stage 未初始化并用于 IntroScreen 类的 render 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-17
      • 1970-01-01
      • 1970-01-01
      • 2014-08-12
      • 1970-01-01
      • 2013-12-16
      • 1970-01-01
      • 2015-07-20
      相关资源
      最近更新 更多