在Libgdx中实现简单运动模糊的意外结果

在两个附加的图片中,libgdx的桌面截图按预期运行。 不幸的是我的Galaxy Nexus的屏幕截图并不如预期的那样。 我正在尝试创build一个简单的运动模糊或跟踪效果。

按照我的预期在桌面上进行渲染。 运行在我的桌面上的Libgdx按预期工作

没有像我期望的银河联系。 运行在我的Galaxy Nexus上的Libgdx没有按预期工作

在渲染过程中,圆形纹理被绘制在for循环中,并且使用在圆圈之前绘制的0,0,0,0.1f的RGBA的像素图来实现该效果。

screenClearSprite创build

Pixmap screenClearPixmap = new Pixmap(256, 256, Format.RGBA8888); screenClearPixmap.setColor(Color.rgba8888(0, 0, 0, 0.1f)); screenClearPixmap.fillRectangle(0, 0, 256, 256); screenClearTexture = new Texture(screenClearPixmap); screenClearSprite = new Sprite(screenClearTexture); screenClearSprite.setSize(screenWidth, screenHeight); screenClearPixmap.dispose(); 

给予

 batch.begin(); font.draw(batch, "fps:" + Gdx.graphics.getFramesPerSecond(), 0, 20); screenClearSprite.draw(batch); for (int i = 0; i < circleBodies.size(); i++) { tempPos = circleBodies.get(i).getPosition(); batch.draw(circleTexture, (tempPos.x * SCALE) + screenWidthHalf - circleSizeHalf, (tempPos.y * SCALE) + screenHeightHalf - circleSizeHalf); } batch.end(); 

那么,我做错了什么? 也许有更好的方法来获得运动的“运动模糊”效果?

Solutions Collecting From Web of "在Libgdx中实现简单运动模糊的意外结果"

这是一个不同的方法,你每次用纯色和没有alpha清理你的屏幕。

这意味着你将不得不修改你的代码。 关于这件事的好处是,你这样做的方式有一些缺陷:它会把所有的东西都模糊化,而不仅仅是球。 除非你小心,否则会很快产生丑陋的结果/文物。

  1. 像现在这样做,但是不是将graphics绘制到批处理中,而是将其绘制到纹理/位图/任何东西上。 然后,每帧在球形图像上添加一个alpha混合图像,然后在其当前位置上绘制球体。 然后将该图像添加到您的屏幕上。 非常像你现在正在做的,除了你画其他东西,并保持它。 这样你就不必依靠你正在绘制的视口,并且可以保持一切分离。 这种方法类似于绘制到累积缓冲区

  2. 你可以跟踪每个球的n个最新的位置,而不是像你这样做。 然后用不同的alpha来绘制每一帧。 这很容易实现。 如果你有很多球或大n ,可以导致很多绘图调用,但如果它不是太多,它不应该限制你的fps,并给予很好的控制。

也许有更好的方法来获得运动的“运动模糊”效果?

为了使我的游戏中的运动模糊我使用另一个接近“ 粒子效应 ”它的作品真的很好,我没有Android /桌面的问题,或与不同的Android设备

所有你需要做的就是使用Libgdx的“粒子效果编辑器”,然后把你的效果加载到你的项目中,最后在你绘制对象的相同位置绘制它(并绘制你的对象)

使用Paticle Editor制作正确的效果文件的技巧:

  • 在粒子效果中设置(使用)与要模糊它的对象相同的图像

  • 尝试限制计数 :允许的最大粒子数

  • 禁用“速度”和“angular度”参数

粒子效果有助于做运动的效果希望这会帮助别人!