java - libGDX 渲染 TextureRegion 渲染太多

标签 java android libgdx

我想使用 libGDX 开发一个简单的 2D 横向卷轴游戏。

我的世界包含许多不同的 64x64 像素 block ,这些 block 由 SpriteBatch 使用相机绘制以适合屏幕。我的 640x640px 资源文件包含所有这些图像。 block 纹理在我的资源文件中位于 (0, 0)、(0, 64)、(64, 0)、... 等等。 当我的应用程序启动时,我加载纹理并创建许多不同的 TextureRegions:

    texture = new Texture(Gdx.files.internal("texture.png"));
    block = new TextureRegion(texture, 0, 0, 64, 64);
    block.flip(false, true);
    // continue with the other blocks

现在,当我渲染我的世界时,一切似乎都很好。但是有些 block (大约 10% 的 block )被绘制为好像 TextureRegion 的矩形定位错误 - 它将上面(在资源纹理中) block 的纹理的最底部像素行绘制为其最顶部像素行。大多数 block 都正确呈现,我多次检查我是否输入了正确的位置。

奇怪的是,当我在我的电脑而不是我的安卓设备上启动游戏时,纹理绘制正确!

在搜索解决方案时,很多人会引用过滤器,但线性和最近都不适合我。 :(

希望我能够以通俗易懂的方式解释问题,并且您对如何解决这个问题有任何想法(=如何只绘制我想绘制的纹理区域)!

最好的问候

编辑: 该错误只出现在某些位置。当我在不同位置绘制两个具有相同纹理的 block 时,其中一个正确绘制而另一个不正确..我不明白....

最佳答案

当打包到一个纹理中时,您应该始终在图像之间留出空白,因为如果您对每个像素使用 FILTER_LINEAR(我认为这是默认设置),它将从四个最近的像素中采样。如果您的图像没有空像素填充,对于所有边缘像素,它将从相邻图像获取像素。

解决您的问题的三个选项:

  1. 在纹理文件中手动添加图像之间的空间
  2. 停止使用 FILTER_LINEAR(但如果您没有在原始图像尺寸中绘制,例如缩放图像,您将得到难看的结果)
  3. 使用 Libgdx Texture Packer,当您打包图像时,它有一个构建功能可以做到这一点

关于java - libGDX 渲染 TextureRegion 渲染太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35873313/

相关文章:

android - 正交相机的旋转

scroll - libGDX:如何让相机指向移动的 Sprite ?

android NDK 加载库 - UnsatisfiedLinkError

java - 如何在 Clojure 中调用不带参数的 Java 静态方法?

android - Android Studio 4.1 中缺少 Logcat

java - Hibernate 4 connection.autocommit=false 忽略

android - 没有构建应用程序的 Phonegap : Fast way of testing Camera-Functions,

android - 如何监视和记录哪个模块在 linux 内核中持有锁?

java - 为 Eclipse 插件导入 org.eclipse.core 包

java - 为什么 @AssertTrue 不起作用而 @NotNull 起作用?