@Override
public void show()
{
main = new MainClass();
texture = main.manager.get("ball.png");
mainActor = new MainActor(world, texture, new Vector2(1,2));
stage.addActor(mainActor);
}
尝试在空对象引用上调用虚拟方法'java.lang.Object com.badlogic.gdx.assets.AssetManager.get(java.lang.String)'
如何解决?
“经理”是在我的MainClass上创建的AssetManager
我的MainClass
public class MainClass extends Game
{
protected AssetManager manager;
@Override
public void create()
{
manager = new AssetManager();
manager.load("ball.png", Texture.class);
manager.finishLoading();
setScreen(new MainScreen(this));
}
}
答案 0 :(得分:0)
您正在create()
方法内创建管理器对象,但是您没有在调用该方法。 create()
方法不是构造函数-不会自动调用。我不知道Game类的构造函数在做什么,但很可能不是在不调用create()
,而是在其他情况下调用了该方法。
答案 1 :(得分:0)
我假设您的第一段代码来自MainScreen类中。您的MainScreen创建新的MainClass Game实例是没有意义的。既然如此,您引用的是一个从未调用过create()
的MainClass实例,因此它的manager
为空。
由于我可以看到您的MainScreen类已经采用了MainClass的一个实例,因此您只需要确保它已存储了它,就不必实例化一个新的实例。在这种情况下,我将传入的变量声明为final
,因此我知道它们将不会更改(并且不可能意外地更改它们)。
public class MainScreen implements Screen {
final MainClass main;
public MainScreen(MainClass main){
this.main = main;
}
//...
@Override
public void show()
{
texture = main.manager.get("ball.png");
mainActor = new MainActor(world, texture, new Vector2(1,2));
stage.addActor(mainActor);
}
//...
}