【问题标题】:Why does one button work, and the other error in libGDX?为什么一个按钮有效,而 libGDX 中的另一个错误?
【发布时间】:2013-06-03 09:19:44
【问题描述】:

我有一个 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

【问题讨论】:

    标签: java libgdx


    【解决方案1】:

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

    【讨论】:

    • 我将 MainMenuScreen 类中的所有代码从我的节目中移到构造函数中,但没有任何改变。没有变得更糟。没有好转。
    • 还有resize中的代码,我从不使用那个方法,你应该在你的构造函数中初始化所有东西。不确定是否在创建时和渲染之前调用了调整大小
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 2019-01-03
      • 1970-01-01
      • 2023-03-17
      相关资源
      最近更新 更多