0

我正在使用andengine开发游戏..我使用AutoParallaxBackground移动背景图像..它工作正常..但我在图像之间有一个空白行..图像没有问题

ie: autoParallaxBackground.addParallaxEntity(new ParallaxEntity(-20.0f, new Sprite(0, 0, this.bgTextureRegion1)));

如何解决这个问题?

在此处输入图像描述

设备屏幕截图...左角可见空白行

图像尺寸:720x480 相机尺寸:720x480 手机屏幕尺寸:320x240

4

3 回答 3

3

问题是由于在应用双线性过滤时 TextureAtlas 的黑色背景溢出到图像上造成的。解决方法是将最左边和最右边的 1px 线加倍,使出血具有正确的颜色。这是一个令人讨厌的修复,应该证明这确实是问题所在,但是它将加载背景所需的时间增加了三倍,因此它对生产代码没有用处。当您为背景创建 TextureAtlas 时,请执行以下操作:

BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.backgroundBitmapTexture, this, "background.png", 0, 0);
BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.backgroundBitmapTexture, this, "background.png", 2, 0);
this.backgroundTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.backgroundBitmapTexture, this, "background.png", 1, 0);

这样做是加载纹理三次,前两次向左和向右移动 1 个像素。第三个调用在两者之间创建实际的纹理区域。

于 2012-09-27T09:08:16.403 回答
0

双线性纹理选项正是问题所在。在 GLES2.0 中,您可以消除 TextureOptions.BILINEAR,也可以将其更改为 NEAREST_PREMULTIPLYALPHA。

于 2013-08-24T22:30:52.030 回答
0

为您的背景精灵实现 preDraw() 方法并设置 pGLState.enableDither();

new Sprite(0, CAMERA_HIGHT,
                    this.mParallaxLayerBack, vertexBufferObjectManager) {

                @Override
                protected void preDraw(GLState pGLState, Camera pCamera) {

                    super.preDraw(pGLState, pCamera);
                    pGLState.enableDither();
                }

            }
于 2014-11-20T12:31:50.137 回答