объект с нулевой точкой с помощью менеджера активов - PullRequest
1 голос
/ 18 октября 2019
@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)' для ссылки на нулевой объект

как исправитьэто?

"менеджер" - это AssetManager, созданный на моем MainClass

мой 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));
    }

}

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Я предполагаю, что ваш первый блок кода находится внутри вашего класса MainScreen. Для вашего основного экрана не имеет смысла создавать новый экземпляр игры MainClass. И поскольку это так, вы ссылаетесь на экземпляр MainClass, для которого никогда не вызывался create(), поэтому его 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);
    }

    //...

}
0 голосов
/ 18 октября 2019

Вы создаете объект менеджера внутри create() метода, но вы не вызываете этот метод. create() метод не является конструктором - он не будет вызываться автоматически. Я не знаю, что делает конструктор класса Game, но, скорее всего, он не вызывает create(), но этот метод вызывается в другом случае.

...