PolygonRegion创建anr

时间:2014-01-15 14:13:42

标签: android opengl-es libgdx

我正在尝试为剪裁纹理创建遮罩。用户在屏幕上移动手指,并且他将在手指面具上创建。我的问题是,在用户长时间移动屏幕和手指上后,屏幕开始创建,我已经排成一行

PolygonRegion polyReg = new PolygonRegion(textRegion, coord); 

其中coord它浮动数组和textRegion它对象TextureRegion与纹理需要绘制。用户长时间在屏幕上移动时会出现问题。我第一次认为PolygonRegion无法解决很多问题,但是在我理解之后它没有计算点问题(有时我有160点的anr,有时候我没有1000点的anr)。也许有人会采取同样的问题,并可以说出它可能是什么 代码:

if(maskBufferer != null){
 maskBufferer.dispose();
 }
 maskBufferer = new FrameBuffer(Pixmap.Format.RGBA8888, width, height, true);
 mask = createMaskImageMask(aspectRatioCrop, maskBufferer);
 ...

private Texture createMaskImageMask(boolean aspectRatioCrop, FrameBuffer maskBufferer) {
    maskBufferer.begin();

    Gdx.gl.glClearColor(COLOR_FOR_MASK, COLOR_FOR_MASK, COLOR_FOR_MASK, ALPHA_FOR_MASK);
    Gdx.graphics.getGL20().glClear(GL20.GL_COLOR_BUFFER_BIT);
    float[] coord = null;
    coord = mCoodrinateArray.getCoodrinatesInScreenSize();
    mCoodrinateArray.clean();
    PolygonRegion polyReg = new PolygonRegion( new TextureRegion(new Texture(Gdx.files.internal(texturePolygon)) ),
        coord);
    PolygonSprite poly = new PolygonSprite(polyReg);
    PolygonSpriteBatch polyBatch = new PolygonSpriteBatch();
    polyBatch.begin();
    poly.draw(polyBatch);
    polyBatch.end();

    maskBufferer.end();

    texture.dispose();
    polyBatch.dispose();
    return maskBufferer.getColorBufferTexture();
}

在onMove代码中:

Vector3 vec = MathUtils.toGlFromScreenV3(detector.getCurrEvent().getX(),    detector.getCurrEvent().getY(), mWidth, mHeight);
mCoodrinateArray.addCoordinate(vi.x, vi.y);

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。这是LibGDX旧版本中的一个错误。解决方案是简单更新libGDX,并阅读doc。因为多边形的逻辑已经改变了。