19

在所附的两张图片中,libgdx 的桌面截图按预期运行。不幸的是,我的 Galaxy Nexus 的屏幕截图不如预期。我正在尝试创建一个简单的运动模糊或轨迹效果。

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

没有像我预期的那样在我的 Galaxy Nexus 上渲染。 在我的 Galaxy Nexus 上运行的 Libgdx 未按预期工作

圆形纹理在渲染期间在 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();

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

4

2 回答 2

0

这是一种不同的方法,您每次都用纯色和无 alpha 清除屏幕。

这意味着您将不得不修改您的代码。这样做的好处是,你这样做的方式有一些缺陷:它会模糊运动中的一切,而不仅仅是球。除非你小心,否则会很快产生丑陋的结果/伪影。

  1. 和你现在做的一样,但不是将球绘制到批次上,而是将它们绘制到纹理/位图/任何东西上。然后每一帧在球图像上添加一个 alpha 混合图像,然后在其上绘制球的当前位置。然后将该图像添加到您的屏幕。很像你现在正在做的,除了你画到别的东西上并保持它。这样您就不必依赖正在绘制的视口,并且可以将所有内容分开。此方法类似于绘制到累积缓冲区

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

于 2012-06-04T19:36:37.557 回答
0

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

为了在我的游戏中制作运动模糊,我使用了另一种方法“粒子效果”,它对我来说非常好用,而且我没有 Android/桌面问题或不同的 Android 设备

您所要做的就是使用Libgdx的“粒子效果编辑器”并制作您的效果然后将其加载到您的项目中最后将它绘制在您绘制对象的相同位置(并且alos绘制您的对象)

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

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

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

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

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

于 2015-10-13T13:41:21.443 回答