我正在尝试创建一个将一些文本绘制到屏幕的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() {
}
}
当我运行该程序时,游戏就崩溃了。
答案 0 :(得分:0)
您实例化了没有SpriteBatch的舞台,因此它创建了自己的舞台。然后,您的MyActor会忽略该SpriteBatch,并尝试使用game
中没有调用它的begin()
。
相反,您的舞台应使用game
中的SpriteBatch进行实例化,而MyActor应仅使用传递给其绘制方法的batch
。
这可能不是你得到的崩溃,但你没有发布你的堆栈跟踪。
答案 1 :(得分:0)
从未调用的IntroScreen的创建方法因此未初始化并在IntroScreen类的render方法中使用。