【发布时间】:2015-09-17 09:33:17
【问题描述】:
我是 LibGDX 的新手,正在尝试实现视差背景。 一切都很顺利,直到我遇到这样的问题:滚动背景时出现一些条纹。您可以在附图中看到它:
所以我更深入地研究了一个问题并发现这是某种纹理渗出。但情况是我的纹理已经有 [Linear, Nearest] 过滤器集,TexturePacker 使用duplicatePadding。实际上,我不知道任何其他方法可以解决此问题。请帮忙!
这是我的一些代码:
TexturePacker
TexturePacker.Settings settings = new TexturePacker.Settings();
settings.minWidth = 256;
settings.minHeight = 256;
settings.duplicatePadding = true;
TexturePacker.process(settings, "../../design", "./", "textures");
资产加载器
textureAtlas = new TextureAtlas(Gdx.files.internal("textures.atlas"));
for (int i = 0; i < 2; i++) {
Background.skies.add(textureAtlas.findRegion("background/sky", i));
Background.skies.get(i).getTexture().setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Nearest);
}
for (int i = 0; i < 2; i++) {
Background.clouds.add(textureAtlas.findRegion("background/cloud", i));
Background.clouds.get(i).getTexture().setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Nearest);
}
for (int i = 0; i < 8; i++) {
Background.cities.add(textureAtlas.findRegion("background/city", i));
Background.cities.get(i).getTexture().setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Nearest);
}
Background.moon = textureAtlas.findRegion("background/moon");
Background.forest = textureAtlas.findRegion("background/forest");
Background.road = textureAtlas.findRegion("background/road");
Background.moon.getTexture().setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Nearest);
Background.forest.getTexture().setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Nearest);
Background.road.getTexture().setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Nearest);
BackgroundDrawer
private void drawParallaxTextureList(Batch batch, List<TextureAtlas.AtlasRegion> list,
float moveX, float posY) {
for (int i = 0; i < list.size(); i++) {
boolean needDraw = false;
float shift = GameScreen.VIEWPORT_WIDTH * i;
float drawX = 0.0f;
if (shift - moveX <= -(GameScreen.VIEWPORT_WIDTH)) { // If it's behind the screen
if (i == 0) { // If it's first element
if (moveX >= GameScreen.VIEWPORT_WIDTH * (list.size() - 1)) { // We need to show first after last
needDraw = true;
drawX = (GameScreen.VIEWPORT_WIDTH) - (moveX - ((GameScreen
.VIEWPORT_WIDTH) * (list.size() - 1)));
}
}
} else if (shift - moveX < (GameScreen.VIEWPORT_WIDTH - 1)) {
needDraw = true;
drawX = shift - moveX;
}
if (needDraw) {
batch.draw(list.get(i), (int) drawX, (int) posY);
}
}
}
注意:我现在不使用任何相机进行绘图。我只使用大小为1920x1280 的FitViewport。此外,即使在 FullHD 分辨率下,有时也会出现渗色。
更新:设置Nearest 过滤器进行缩小和放大,增加paddingX 并禁用抗锯齿解决了问题,但最终图像变得太丑了!有没有办法避免禁用抗锯齿?因为没有它,缩小版看起来很糟糕。
【问题讨论】:
-
如果您将过滤器保持为线性,禁用抗锯齿是否有帮助?为什么还要在 2D 游戏中使用抗锯齿?
标签: android opengl-es libgdx texturepacker