游戏开发,移动摄像机时出现奇怪的图像效果。

17

我正在开发一个侧滚动2D游戏,使用AndEngine

游戏图片

我正在使用他们的SVG扩展(矢量图形)

但是我发现了奇怪而丑陋的效果,当我移动我的玩家时(当相机正好追逐玩家时,意味着相机正在改变其位置)

我的精灵图像看起来完全不同,就像模糊了一样,或者有一种就像这些图像在移动一样的效果(没有改变它们的位置,只是抖动的效果,真的很难解释和恰当地称呼这种效果)。希望这张图片可以稍微解释一下:

游戏图片 2

它更多或少是游戏中的样子,其中:

a)“FIRST”图像显示正方形,而玩家正在移动(摄像机没有移动)图像看起来像它应该的那样

b)“SECOND”是相同的图像,但具有这种奇怪的效果,“它看起来像图像在相机移动(追逐玩家)期间模糊了”

我的一个朋友告诉我,这可能是硬件问题:

“您注意到的模糊实际上是硬件问题。一些手机会在屏幕上“平滑”内容,以使应用程序更具吸引力。我不知道是屏幕还是图形处理器,但它不会发生在我妻子的三星Captivate上。然而,在我的Atrix和Xoom上发生了这种情况。由于屏幕尺寸较大,它在Xoom上非常明显。”

但似乎有办法防止这种情况,因为我已经测试了许多类似的游戏,其中相机正在追逐玩家,但我没有注意到这样的效果。

有没有办法在代码中关闭它?


感谢之前的答案,不幸的是问题仍然存在。

到目前为止,我尝试了:

  • 在updateChaseEntity上执行setCenter方法时进行强制转换(int)
  • 使用PNG图片而非SVG扩展和矢量图形进行游戏测试
  • 不同的纹理选项
  • 硬件加速

如果有人有不同的想法,可能会导致这种奇怪的效果,我将非常感激您的帮助 - 谢谢。


4
记录一下,这里并没有“顶贴”的行为;在StackOverflow上,这种做法通常是不被认可的。将额外的信息编辑到原始问题中是吸引关注的首选方式。 - casperOne
这只是LCD模糊吗? - BRPocock
我不确定,我在我的手机上测试了许多游戏,发现很多没有这样的效果,而且在不同的设备上也有所不同。我不是专家 :( - Matthewek
5个回答

1
当你的玩家向右移动并且相机开始追逐他时,除了玩家之外的所有其他精灵都向左移动。尝试将“模糊”精灵(或其某些锚点)的绝对坐标打印到日志中。精灵的X坐标应该是线性减少的。如果您注意到它有时会增加,那可能是模糊的原因。
希望这可以帮助到您。

1

一些设备(如Xperia Play)在尝试绘制快速移动的物体时会出现出血现象。例如,应用程序列表中的红色图标会在其后面留下模糊的痕迹。您可以尝试在清单中使用hardwareAcceleration(开启和关闭)来查看是否有所不同。

如果您没有使用svg,则可能会获得相同的效果


谢谢回答。不好意思,它并没有改变任何东西。 - Matthewek
如果是这种情况,应用程序中无法解决此问题,您只能购买一个拥有更好屏幕的设备。 - sirbrialliance

0

听起来好像是由于相机以实际增量移动,使得SVG组件停留在非整数边界上,而SVG渲染器使抗锯齿生效以展示这一点。尝试通过将相机值转换为整数来以整数增量移动相机。


感谢您的回答!在我的相机实现(BoundCamera的扩展)中,我重写了以下代码:<code> @Override public void setCenter(final float pCenterX, final float pCenterY) { super.setCenter((int)pCenterX, (int)pCenterY); }</code>因为setCenter是在updateChaseEntity上执行的。但是它并没有改变任何东西,这是您想要的方式还是我做错了?再次感谢。 - Matthewek
不对,那就是我想说的。奇怪——我以为这样会修复它。嗯。 - Chris Dennett
嗯...如果你的实体在位置XX.5上,而你将相机位置四舍五入为整数,比如XX.0,那么你的实体仍然会被绘制在子像素上。你可以保持一切都是整数...在浮点数中跟踪实体位置,但在渲染时使用整数。我不知道这是否是问题,但如果你很绝望,可以试试。 - Aleks
谢谢您的回答,但这不是Chris Dennett建议的相同解决方案吗? - Matthewek

0

我不熟悉这个引擎,但我想知道为什么你要使用矢量图形来呈现像素化的艺术风格。如果你在截图中的角色真的是矢量艺术,那我会感到惊讶...也许它是作为SVG导入的纹理?我以前尝试过几次使用Flash,我也犯了同样的错误...我并不是说这不可能,但它并没有旨在使用Flash或任何其他矢量软件来创建像素艺术。大多数Flash游戏都有相似的外观,这是有原因的。


正如您所注意到的,玩家纹理不是SVG,而只是PNG,因为我还没有为我的玩家创建像样的矢量图(当前仅用于测试目的)。使用SVG扩展名,我就不必担心质量、缩放等问题,而且与需要以不同分辨率提供图形的游戏相比,游戏大小更小。虽然我不是专家,但我发现这很有用。 - Matthewek

0

调试的最佳方式是尝试使用不同外观的精灵。 也许只是您设备显示响应时间慢的问题。 我也是AndEngine开发者,从未见过这种情况。

有时候使用FixedStepEngine可以解决抖动问题,值得一试。

如果你能够发布你的代码,也许我们可以更好地帮助你。


1
谢谢您的回答。不是抖动问题,我在将普通引擎和物理世界更改为有限FPS引擎和固定步进物理世界后遇到了这种效果。但是,通过在我的追逐实体更新中使用mCamera.onUpdate(0.1f);来解决了这个问题。希望我做错了什么,所以这里是我的代码(包括加载纹理的示例、我使用的选项以及如何附加精灵)。http://pastebin.com/sCSgRhS9[我只删除了该类99%无用的代码,以便预览] 感谢您的帮助。 - Matthewek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接