Java 使用libgdx在Android应用程序中加载图像

Java 使用libgdx在Android应用程序中加载图像,java,android,libgdx,Java,Android,Libgdx,我已经完成了一个简单的libgdx游戏,它可以在桶中捕捉雨滴。我想学习更多关于使用图像的知识,所以我试着用一个婴儿来代替雨滴 当我尝试加载baby.png时,出现以下错误: com.badlogic.gdx.utils.GdxRuntimeException: Texture width and height must be powers of two: 60x83 如何加载任意大小的图像?一点阅读让我想到了一个描述,它将一组小图像组合成一个大图像。这使它们加载和绘制速度更快。同样,如果不

我已经完成了一个简单的libgdx游戏,它可以在桶中捕捉雨滴。我想学习更多关于使用图像的知识,所以我试着用一个婴儿来代替雨滴

当我尝试加载baby.png时,出现以下错误:

com.badlogic.gdx.utils.GdxRuntimeException: Texture width and height must be 
powers of two: 60x83

如何加载任意大小的图像?

一点阅读让我想到了一个描述,它将一组小图像组合成一个大图像。这使它们加载和绘制速度更快。同样,如果不关心性能差异,也可以禁用有关图像大小的规则

Texture.setEnforcePotImages(false); 
您可以在中了解有关游戏地图集的更多信息

要创建自己的atlas,可以从使用开始,但我建议最终创建一个命令行项目来自动打包原始图像

我发布了一篇文章,其中引用了bucket and raindrop教程中的示例代码,并切换到使用TextureAtlas。现在,我加载地图册,然后加载地图册中的图像

atlas = new TextureAtlas(Gdx.files.internal("atlas/plank.pack"));
dropImage = atlas.findRegion("images/baby");
bucketImage = atlas.findRegion("images/bucket");
我发现的一个错误是图像无法加载到HTML项目中。我发现你可以通过把所有的图片放在一个子文件夹中来解决这个问题

我创建了一个新项目来保存TexturePacker和我以后要添加的任何单元测试。纹理打包器如下所示:

package com.github.donkirkby.plank;

import com.badlogic.gdx.tools.imagepacker.TexturePacker2;

public class PlankPacker {
    public static void main (String[] args) throws Exception {
        TexturePacker2.process(
                "raw-assets",  // source folder
                "../plank-game-android/assets/atlas", // destination
                "plank.pack"); // data file
    }
}
batch.draw(region, positionX, positionY);

在加载图像之前,请写入

Texture.setEnforcePotImages(false); 

您可以在application listner的创建功能中执行此操作。如果您不想创建纹理图集,这是最简单的方法。您还可以将图片(左上角)放入128x128纹理中: Afaik是两种纹理的非幂次使用速度较慢,需要更多的VRAM。由于GPU的体系结构和OpenGL中纹理绑定的“缓慢”处理,始终建议将同时使用的图像放入一个大pow两个纹理中,并将其作为该纹理的区域抓取,以加快应用程序的速度。 使用和抓取纹理的过程如下所示:

Texture texture = Gdx.files.internal("data/yourtexture.png");
TextureRegion region = new TextureRegion(texture, 0, 0, 60, 83);
要绘制这样的图形:

package com.github.donkirkby.plank;

import com.badlogic.gdx.tools.imagepacker.TexturePacker2;

public class PlankPacker {
    public static void main (String[] args) throws Exception {
        TexturePacker2.process(
                "raw-assets",  // source folder
                "../plank-game-android/assets/atlas", // destination
                "plank.pack"); // data file
    }
}
batch.draw(region, positionX, positionY);

这是一条很好的捷径,谢谢。当然,使用纹理图集有性能方面的好处。@DonKirkby ya纹理图集有很多好处,但很多时候这很方便。。。我们可以使用它,而不是为单个图像制作纹理图谱