为什么一个按钮工作,另一个错误在libGDX中?

时间:2013-06-03 09:19:44

标签: java libgdx

我有一个MenuButton类,它是我正在创建的游戏主菜单上按钮的所有代码和事件处理的容器。我创建了两个按钮,并将它们添加到舞台上(我正在使用scene2d)。我在 last 中添加的按钮是可用的按钮,但第一个按钮执行补间序列,然后抛出NullPointer:

Exception in thread "LWJGL Application" java.lang.NullPointerException
at com.badlogic.gdx.scenes.scene2d.Group.act(Group.java:48)
at com.badlogic.gdx.scenes.scene2d.Stage.act(Stage.java:202)
at me.vynlar.HorseInvaders.Screens.MainMenuScreen.render(MainMenuScreen.java:52)
at com.badlogic.gdx.Game.render(Game.java:46)
at me.vynlar.HorseInvaders.HorseInvaders.render(HorseInvaders.java:22)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:204)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:112)

我无法弄清楚为什么这个错误会在我的生命中发生。异常堆栈顶部的行是:

actors[i].act(delta);

这是在scene2d类之一。

有问题的主要档案: https://github.com/Vynlar/HorseInvaders/blob/master/HorseInvaders/src/me/vynlar/HorseInvaders/Screens/MainMenuScreen.java

2 个答案:

答案 0 :(得分:0)

我今天回答了这样的问题。似乎在'show'方法之前调用'render'方法。将所有代码(show)放在构造函数中。

答案 1 :(得分:0)

为什么要在每个setScreen()调用中创建所有对象的新实例? 这样,您可能会访问可能已初始化的变量。

跟踪实例并提高游戏性能的一种方法(我的意思是,你正在使用这么大量的内存)就是创建它们一次并使它们公开或静态,并在每个你想要的对象中使用它们只需参考您创建它们的类。

另一个提示,不要从一个阶段迭代整个演员列表。如果要进行淡入淡出操作,只需创建一个表,添加要淡化的actor,然后将该表添加到舞台上。只要您希望它们淡出,只需将操作添加到表中即可。 (在将它们添加到舞台后,保留对您可能想要访问的对象的一个​​引用)。