1

シーンをRenderTextureにレンダリングして画面をキャプチャしたいのですが、MotionStreakExampleでこれを実行しようとしましたがすべて問題ありませんが、コードをプロジェクトにコピーすると、この画像が表示されます(テクスチャに問題がある可能性があります...理解できません): ここに画像の説明を入力してください

@Override
public Engine onCreateEngine(EngineOptions pEngineOptions) {
    return new Engine(pEngineOptions) {

        private boolean mRenderTextureInitialized;

        private RenderTexture mRenderTextures ;
        private Sprite mRenderTextureSprites ;

        @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 = WIDTH*2;
            final int surfaceHeight = HEIGHT;


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

                /* Draw previous frame with reduced alpha. */
            }
            this.mRenderTextures.end(pGLState);


            {
                pGLState.pushProjectionGLMatrix();
                pGLState.orthoProjectionGLMatrixf(0, surfaceWidth, 0, surfaceHeight, -1, 1);
                {
                    this.mRenderTextureSprites.setAlpha(1);
                    this.mRenderTextureSprites.onDraw(pGLState, this.mCamera);
                }
                pGLState.popProjectionGLMatrix();
            }

            if (needToSave)
            {
                needToSave = false;
                FSHelper.saveBitmapToFile(this.mRenderTextures.getBitmap(pGLState), SAVED_PATH+"/test.png");
            }

            /* Flip RenderTextures. */

        }

        private void initRenderTextures(final GLState pGLState) {
            final int surfaceWidth = WIDTH*2;
            final int surfaceHeight = HEIGHT;

            final VertexBufferObjectManager vertexBufferObjectManager = mEngine.getVertexBufferObjectManager();
                this.mRenderTextures = new RenderTexture(mEngine.getTextureManager(), surfaceWidth, surfaceHeight);
                this.mRenderTextures.init(pGLState);

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

PS。背景が赤のこの十字架は、私のシーンのスプライトです。

4

2 に答える 2

1

Andengineには、スクリーンショットを撮るためのインフラストラクチャがすでにありますが、それを使用してみましたか?例を見てください: https ://github.com/nicolasgramlich/AndEngineExamples/blob/GLES2/src/org/andengine/examples/ScreenCaptureExample.java

于 2012-04-20T16:50:04.097 に答える
1

答えが見つかりました!テクスチャは動的にロードされ、最初のフレームにはテクスチャをまったくロードしていません。そこに選択ダイアログがあり、その後にすべてのテクスチャを作成するためです。テクスチャが変更されるたびにinitRenderTexturesを呼び出す必要があります。

于 2012-04-21T08:52:42.560 に答える