在附加的两张照片中,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并给出很好的控制.