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

前端之家收集整理的这篇文章主要介绍了java – 在Libgdx中实现简单运动模糊的意外结果前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在附加的两张照片中,libgdx的桌面屏幕截图功能如预期.不幸的是,我的Galaxy Nexus屏幕截图不如预期的那样.我正在尝试创建一个简单的运动模糊或足迹效果.

在我的桌面上渲染我的预期.

不像我预期的那样在我的Galaxy nexus上渲染.

在渲染期间,圆形纹理绘制在for循环中,并且使用在圆圈之前绘制的0,0f的RGBA的像素图来实现效果.

screenClearSprite创建

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

给予

batch.begin();
font.draw(batch,"fps:" + Gdx.graphics.getFramesPerSecond(),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();

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

解决方法

这里有一种不同的方法,您可以在每次使用纯色和无alpha时清除屏幕.

这意味着你必须修改你的代码.关于这件事的好处是,你所做的这样做有一些缺点:它会模糊所有的运动,而不仅仅是球.除非你很小心,否则会很快产生丑陋的结果/文物.

>做你现在做的一样,而不是把球画到批处理,把它们绘制到纹理/位图/任何东西.然后每个帧在球图像上添加一个alpha混合图像,然后将球画在当前位置上.然后将该图像添加到您的屏幕.非常喜欢你现在在做,除了你画别的东西,保持它.这样,您就不必依赖于您正在绘制的视口,而且可以将所有内容都分开.该方法类似于绘制到累加缓冲区.而不是按照你的方式做,你可以跟踪每个球的最新位置.然后画出所有的每一帧,与不同的alpha.这很容易实现.如果您有很多球或大的n,可能会导致许多绘图调用,但如果不是太多,则不应该限制您的fps并给出很好的控制.

猜你在找的Java相关文章