0

我有一个 MenuButton 类,它是我正在创建的游戏主菜单上按钮的所有代码和事件处理的容器。我创建了两个按钮,并将它们都添加到舞台上(我使用的是 scene2d)。无论我最后添加的哪个按钮都是有效的按钮,但第一个按钮执行补间序列,然后抛出 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

4

2 回答 2

0

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

于 2013-06-03T09:54:13.200 回答
0

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

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

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

于 2013-06-10T16:22:46.373 回答