我目前正在使用名为 libgdx 的框架学习游戏编程。它允许用户制作可以在桌面上的 Java 虚拟机和 Android 手机上轻松运行的程序。我正在尝试制作一个基本程序,它将在屏幕上显示一个字符并允许我用键盘来回移动它。我创建了 3 个类 - 一个名为Assets
,它将文件加载到内存中并将它们转换为纹理和动画,一个名为InputHandler
,它通过更改动画、移动方向等来响应键输入,还有一个名为FightView
,它本质上是所有渲染完成。使用典型的命令InputHandler
从类中调用。for 的构造函数如下所示: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
即使在通过构造函数传递之后,它仍然是 null,它(可以在构造函数的第三行中看到)应该为它分配一个值。请注意,在传递给构造函数之前,它们实际上都是 null - 我正在尝试创建一个类,该类将提供字段数据,而无需在FightView
类中这样做。
任何帮助表示赞赏。这可能是错误的方法——我想做的是创建一个对象,在初始化时,它将加载Animation
andTextureRegion
数据。