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

时间:2012-06-02 03:27:58

标签: java android opengl-es libgdx

在两张附图中,libgdx的桌面截图按预期运行。遗憾的是,我的Galaxy Nexus屏幕截图并不像预期的那样。我试图创建一个简单的运动模糊或轨迹效果。

在我的桌面上按预期渲染。 Libgdx running on my desktop, working as expected

没有像我预期的那样渲染Galaxy nexus。 Libgdx running on my Galaxy Nexus not working as expected

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

screenClearSprite创建

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();

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

2 个答案:

答案 0 :(得分:0)

这是一种不同的方法,每次都用纯色清除屏幕而没有alpha。

这意味着您必须修改一些代码。关于这一点的好处是,你做它的方式有一些缺陷:它会模糊运动中的所有,而不仅仅是球。除非你小心,否则很快就会产生难看的结果/文物。

  1. 执行与现在相同的操作,但不是将球绘制到批处理中,而是将它们绘制到纹理/位图/任何内容上。然后每个帧在球图像上添加一个alpha混合图像,然后将球放在它们当前位置的顶部。然后将该图像添加到屏幕上。非常像你现在正在做的事情,除非你画其他东西并保留它。这样您就不必依赖于要绘制的视口,并且可以将所有内容分开。 此方法类似于绘制到累积缓冲区

  2. 您可以跟踪每个球的 n 最新位置,而不是按照您的方式进行操作。然后用不同的alpha绘制每一帧的所有帧。这很容易实现。如果你有很多球或者很大的 n ,可能会导致许多绘图调用,但如果它不是太多,它不应该限制你的fps并给出很好的控制。

答案 1 :(得分:0)

  

也许有一种更好的方法可以让动作变得模糊&#39;的影响   移动?

为了在我的游戏中使运动模糊我使用另一个approch&#34; 粒子效果&#34;它真的很好用,我没有Android /桌面问题或不同的Android设备

你所要做的就是使用&#34;粒子效果编辑器&#34;然后将你的效果加载到你的项目中,最后在你绘制对象的同一位置绘制它(并且alos绘制你的对象)

使用Paticle Editor制作正确效果文件的提示:

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

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

  • 禁用&#34;速度&#34;和&#34;角度&#34; 参数

粒子效果有助于做动作效果 希望这会对某人有所帮助!