如何在 android/andengine 中剪辑或屏蔽实体?

Posted

技术标签:

【中文标题】如何在 android/andengine 中剪辑或屏蔽实体?【英文标题】:How to clip or mask entity in android/andengine? 【发布时间】:2015-05-06 10:34:47 【问题描述】:

我想在 Andengine 中使用 sprite 实现遮罩。我想要与 ios 类中相同的功能,称为

SKCropNode

它就像一个屏蔽节点!在 andengine/opengl 中有这样的解决方法吗?谢谢。

编辑:这是我试图掩盖实体的东西,没有效果,有什么建议吗?

public class ClippingEntity extends Entity//BaseSprite


protected int mWidth;
protected int mHeight;

public ClippingEntity(float pX, float pY, int pWidth, int pHeight, TextureRegion t)

    super(pX, pY);//, pWidth, pHeight, t);
    mWidth = pWidth;
    mHeight = pHeight;


@Override
protected void onManagedDraw(GL10 pGL, Camera pCamera)


    pGL.glPushMatrix();
    

        pGL.glEnable(GL10.GL_SCISSOR_TEST);
        pGL.glScissor(0 + (int) mX, 800 - mHeight + (int) mY, mWidth, mHeight);

        super.onManagedDraw(pGL, pCamera);

        pGL.glDisable(GL10.GL_SCISSOR_TEST);

    
    pGL.glPopMatrix();


我也尝试过 Stencil Test,但它只是清除了矩形的颜色。 参考:opengl mask tests

最终目标是在特定实体中禁用绘图更改,它也可能具有透明背景。

【问题讨论】:

【参考方案1】:

试试这个,它应该可以工作:

 @Override
 protected void onManagedDraw(final GLState pGLState, final Camera pCamera)
 
    pGLState.pushProjectionGLMatrix();
    pGLState.enableScissorTest();
    GLES20.glScissor(0 + (int) mX, 800 - mHeight + (int) mY, mWidth, mHeight);
    super.onManagedDraw(pGLState, pCamera);
    pGLState.disableScissorTest();
    pGLState.popProjectionGLMatrix();

对于 GLES1,试试这个: http://www.andengine.org/forums/gles1/clipping-effect-t2962.html

【讨论】:

正如您在 managedDraw 函数中的问题中看到的那样,它使用 GL10。您的功能基于 GL20。所以我找不到以上opengl的功能。而且我已经尝试过简单的剪刀测试,但一无所获! 对不起,我的错,我以为你在使用 GLES2。我会更新原来的答案。

以上是关于如何在 android/andengine 中剪辑或屏蔽实体?的主要内容,如果未能解决你的问题,请参考以下文章

Android Andengine 背景音乐自动复制

如何在影片剪辑中获取ChildAt 影片剪辑?

如何使用顶部的按钮在 Flash 中缩放影片剪辑

如何从另一个影片剪辑中访问影片剪辑中的帧

如何在android中剪辑圆圈

如何从 Sonos 中删除音频剪辑