В настоящее время я изучаю программирование игр, используя среду под названием libgdx.Это позволяет пользователям создавать программы, которые можно легко запускать как на виртуальной машине Java на настольном компьютере, так и на мобильном телефоне Android.Я пытаюсь создать простую программу, которая будет отображать символ на экране и позволит мне перемещать его вперед и назад с помощью клавиатуры.Я создал 3 класса - один с именем Assets
, который загружает файлы в память и преобразует их в текстуры и анимации, один с именем InputHandler
, который реагирует на ввод с клавиатуры путем изменения анимации, направления движения и т. Д., А другой называетсяFightView
, что по сути и делает весь рендеринг.InputHandler
вызывается из класса FightView
с типичной командой input = new InputHandler(anim, frame);
.Конструктор для InputHandler
выглядит следующим образом:
public InputHandler(Animation animation, TextureRegion region){
Assets.load(); //loads textures from files into memory and creates animations from them
animation = Assets.playStance; //set initial animation to be used
region = animation.getKeyFrame(0, true); //make TextureRegion equal to first frame in animation
}
Теперь, что я хочу, это просто, чтобы Animation и TextureRegion, переданные в конструктор, были установлены в значения, указанные выше, так что, например,, если бы я упомянул region
в классе FightView
после того, как input
был объявлен, он будет установлен как animation.getKeyFrame(0, true);
.Из моего ограниченного опыта Java это то, что я считаю, должно произойти, но я получаю исключение NullPointerException во время компиляции, указывающее на вторую строку в коде ниже:
input = new InputHandler(anim, frame);
x = centreX - (frame.getRegionWidth() / 2);
Ясно, что frame
по-прежнему нулевой,даже после прохождения через конструктор, который (как видно из третьей строки в конструкторе) должен присвоить ему значение.Обратите внимание, что перед передачей в конструктор они оба фактически равны нулю - я пытаюсь создать класс, который будет предоставлять данные полей без необходимости делать это в классе FightView
.
Любая помощь приветствуется.Это может быть неправильным путем - я пытаюсь создать объект, который при инициализации будет загружать Animation
и TextureRegion
s с данными.