像素细线出现在相机移动的精灵之间

由于缺乏屏幕截图,我将事先道歉,但这是一件非常难以捕捉的事情,但非常明显。

我使用LibGDX来创建一个瓦片基地stream氓。 一切顺利,运行良好,但有一个graphics故障是非常麻烦的。 我有相机LERPing对玩家,但这种平滑的运动造成非常小的差距出现在地砖之间的一个框架,相当分心。

瓦片渲染代码看起来像这样:

for(int y = 0, i = 0; y < mHeight; y++) { for(int x = 0; x < mWidth; x++, i++) { batch.draw(mTiles[i].textureRegion, x * TILE_SIZE, y * TILE_SIZE); } } 

其中mTiles是代表二维地牢的一维数组, batch是用于渲染的主SpriteBatch, textureRegion是该Tile的TextureRegion。

相机代码如下所示:

 pos = mEntity.getPosition(); mCam.position.x = MathUtils.lerp(mCam.position.x, pos.x * TILE_SIZE, delta); mCam.position.y = MathUtils.lerp(mCam.position.y, pos.y * TILE_SIZE, delta); 

如果我将LERP的结果强制转换为int,迫使摄像机与瓦片alignment,问题就解决了,但这并不理想。 我也尝试从纹理区域创建整个地牢地板的新纹理,但似乎没有任何优雅的方式来做到这一点。

其他人面临类似的情况? 我会尝试捕捉一些截图并在以后发布。

模糊逻辑给出的许多回应都归结为在纹理周围添加填充,或者将相机值四舍五入为整数。 由于我的游戏像素艺术风格,四舍五入的价值观效果最好。 这是更新的相机代码:

 GridPoint2 pos = mEntity.getPosition(); mCam.position.x += (int) ((pos.x * TILE_SIZE - mCam.position.x) / 2 + TILE_SIZE / 2) / 8; mCam.position.y += (int) ((pos.y * TILE_SIZE - mCam.position.y) / 2 + TILE_SIZE / 2) / 8; 

这也具有游戏者可以移动的缓冲区的副作用,但是相机却没有。 我个人喜欢这个,但是我敢肯定,如果你不这样做的话,有一种方法可以避免它。