【问题标题】:libgdx can't load texture to arraylibgdx 无法将纹理加载到数组
【发布时间】:2016-06-23 13:39:58
【问题描述】:

使用 libgdx,我正在创建一个 2D 游戏。我想将所有纹理加载到一个数组中。所以我为他们创建了一个类。我想在render() 中循环图像数组:

public class LoadingImages {
    public Texture[] images;

    public area1() {
        images[0] = new Texture(Gdx.files.internal("img/image1.jpg"));
    }
}

当我尝试运行它时,这会给我带来错误:

Exception in thread "LWJGL Application" java.lang.NullPointerException
          at com.mygame.game.LoadingImages.loading(LoadingImages.java:31)

图片的数量会因地区而异。

【问题讨论】:

  • 请提供您遇到的错误
  • com.mygame.game.LoadingImages.loading(LoadingImages.java:31) 处的线程“LWJGL 应用程序”java.lang.NullPointerException 中的异常 31 是图像 [0] = 新纹理处的行号(gdx.files.internal("img/image1.jpg"));
  • 谢谢你:)。请用它更新您的问题。
  • 我的目标是创建一个可以加载特定区域的所有图像、动画和声音的类,以便能够在渲染函数中绘制图像,并且由于每个区域都有不同的数字图像,我的想法是加载所有图像,因为纹理将其传递给数组,然后在渲染函数的数组上创建一个 for 循环

标签: java libgdx


【解决方案1】:

另见What is a NullPointerException, and how do I fix it?

您正在尝试访问尚未分配的变量:images[0]。在您可以使用数组中的第一个元素之前,您必须创建一个大小至少为1 的数组。因此,将其更改为:

public *void* area1() {
    images = new Texture[1];
    images[0] = new Texture(Gdx.files.internal("img/image1.jpg"));
}

话虽如此,您的异常与您的代码不匹配。此外,您可能需要重新考虑您的方法,使用许多纹理会很快影响性能,因为这意味着刷新批处理。最好将图像打包成单个纹理。如果您想通过索引访问您的图像,那么这仍然是可能的。 See this.

另外AssetManager 比手动加载所有资源要方便得多。 See this.

【讨论】:

  • 我的游戏全是 2d 图片和声音,area1 有 1 个背景图片和一些 spryte 动画,当玩家从 area1 转到 area2 时背景会发生变化,但一些 sprite 动画是相同的,其他的是新的,最好的方法是什么?,现在我将背景加载为单个图像,并将精灵动画加载为图集纹理。为每个动画对象
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-25
  • 2020-04-01
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多