0

AndEngine GLES2 有一个完整场景运动条纹/模糊的示例,效果很好,但我想将该运动模糊仅应用于特定的精灵。

有点像我不希望我的角色运动模糊,只是咒语(精灵)。

这就是我现在用来做运动模糊的方法,它只是 AndEngine 示例,但问题是它似乎拍摄了整个屏幕的快照,应用 aplha,然后将其与下一帧合并屏幕,我只想将这种“alpha”模糊效果应用于单个精灵。

@Override
public Engine onCreateEngine(EngineOptions pEngineOptions) {
    return new Engine(pEngineOptions) {
        private static final int RENDERTEXTURE_COUNT = 2;

        private boolean mRenderTextureInitialized;

        private final RenderTexture[] mRenderTextures = new RenderTexture[RENDERTEXTURE_COUNT];
        private final Sprite[] mRenderTextureSprites = new Sprite[RENDERTEXTURE_COUNT];

        private int mCurrentRenderTextureIndex = 0;

        @Override
        public void onDrawFrame(final GLState pGLState) throws InterruptedException {
            final boolean firstFrame = !this.mRenderTextureInitialized;

            if(firstFrame) {
                this.initRenderTextures(pGLState);
                this.mRenderTextureInitialized = true;
            }

            final int surfaceWidth = this.mCamera.getSurfaceWidth();
            final int surfaceHeight = this.mCamera.getSurfaceHeight();

            final int currentRenderTextureIndex = this.mCurrentRenderTextureIndex;
            final int otherRenderTextureIndex = (currentRenderTextureIndex + 1) % RENDERTEXTURE_COUNT;

            this.mRenderTextures[currentRenderTextureIndex].begin(pGLState, false, true);
            {
                /* Draw current frame. */
                super.onDrawFrame(pGLState);

                /* Draw previous frame with reduced alpha. */
                if(!firstFrame) {
                    if(Info.motionStreaking) {
                        this.mRenderTextureSprites[otherRenderTextureIndex].setAlpha(0.9f);
                        this.mRenderTextureSprites[otherRenderTextureIndex].onDraw(pGLState, this.mCamera);
                    }
                }
            }
            this.mRenderTextures[currentRenderTextureIndex].end(pGLState);

            /* Draw combined frame with full alpha. */
            {
                pGLState.pushProjectionGLMatrix();
                pGLState.orthoProjectionGLMatrixf(0, surfaceWidth, 0, surfaceHeight, -1, 1);
                {
                    this.mRenderTextureSprites[otherRenderTextureIndex].setAlpha(1);
                    this.mRenderTextureSprites[otherRenderTextureIndex].onDraw(pGLState, this.mCamera);
                }
                pGLState.popProjectionGLMatrix();
            }

            /* Flip RenderTextures. */
            this.mCurrentRenderTextureIndex = otherRenderTextureIndex;
        }

        private void initRenderTextures(final GLState pGLState) {
            final int surfaceWidth = this.mCamera.getSurfaceWidth();
            final int surfaceHeight = this.mCamera.getSurfaceHeight();

            final VertexBufferObjectManager vertexBufferObjectManager = this.getVertexBufferObjectManager();
            for(int i = 0; i <= 1; i++) {
                this.mRenderTextures[i] = new RenderTexture(DodgingGame.this.getTextureManager(), surfaceWidth, surfaceHeight);
                this.mRenderTextures[i].init(pGLState);

                final ITextureRegion renderTextureATextureRegion = TextureRegionFactory.extractFromTexture(this.mRenderTextures[i]);
                this.mRenderTextureSprites[i] = new Sprite(0, 0, renderTextureATextureRegion, vertexBufferObjectManager);
            }
        }
    };
}

如何将其更改为适用于特定精灵而不是整个可见屏幕?

4

1 回答 1

0

您可以使用粒子系统来创建运动模糊效果。

于 2012-07-21T09:58:54.713 回答