2013-06-03 40 views
0

我有一个MenuButton类,它是我创建的游戏主菜单上按钮的所有代码和事件处理的容器。我创建了两个按钮,并将它们添加到舞台上(我使用的是scene2d)。我在最后添加无论按钮是工作的按钮,但是第一个按钮的功能补间序列,然后抛出一个空指针:为什么一个按钮工作,而libGDX的其他错误?

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

回答

0

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

+0

我将所有代码从我的show,MainMenuScreen类中移动到构造函数中,没有任何更改。没有恶化。没有好转。 – Vynlar

+0

调整大小的代码,我从来没有使用该方法,你应该初始化你的构造函数中的所有东西。不确定是否在创建和渲染之前调用resize – Lestat

0

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

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

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

相关问题