透明圆圈黑色

时间:2017-08-09 15:48:40

标签: java libgdx

我正在尝试制作透明的圆圈以及带有alpha的黑色周围的一切。我正在使用此代码,但它无论如何都不起作用。

Gdx.gl.glEnable(GL20.GL_BLEND);
Gdx.gl.glBlendFunc(GL20.GL_DST_COLOR, GL20.GL_ZERO);
Gdx.gl.glBlendEquation(GL20.GL_FUNC_ADD);
shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
shapeRenderer.setColor(new Color(1, 1, 1, 1f));
shapeRenderer.circle(150,500,300);
shapeRenderer.end();
Gdx.gl.glDisable(GL20.GL_BLEND);

我想要这个:

enter image description here

1 个答案:

答案 0 :(得分:2)

您可以根据自己的要求使用FrameBuffer

public class GdxTest extends ApplicationAdapter implements InputProcessor {

    FrameBuffer frameBuffer;
    SpriteBatch spriteBatch;
    OrthographicCamera camera;

    Vector3 vector3;

    Texture texture,texture1;
    Sprite sprite;

    @Override
    public void create() {

        vector3=new Vector3();
        camera=new OrthographicCamera();
        camera.setToOrtho(false,Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
        spriteBatch=new SpriteBatch();

        texture=new Texture("light.png");

        sprite=new Sprite(texture);
        sprite.setSize(150,150);
        texture1=new Texture("badlogic.jpg");

        Gdx.input.setInputProcessor(this);
    }

    @Override
    public void render() {

        frameBuffer.begin();

        Gdx.gl.glClearColor(.2f,.2f,.2f,1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        spriteBatch.setProjectionMatrix(camera.combined);
        spriteBatch.setBlendFunction(GL20.GL_ONE,GL20.GL_ONE);
        spriteBatch.begin();
        sprite.draw(spriteBatch);
        spriteBatch.end();

        frameBuffer.end();

        spriteBatch.setBlendFunction(GL20.GL_SRC_ALPHA,GL20.GL_ONE_MINUS_SRC_ALPHA);
        spriteBatch.begin();

        spriteBatch.draw(texture1,100,100);
        spriteBatch.end();

        spriteBatch.setProjectionMatrix(spriteBatch.getProjectionMatrix().idt());

        spriteBatch.setBlendFunction( GL20.GL_ZERO,GL20.GL_SRC_COLOR);
        spriteBatch.begin();

        spriteBatch.draw(frameBuffer.getColorBufferTexture(),-1,1,2,-2);
        spriteBatch.end();
    }

    @Override
    public void resize(int width, int height) {

       if(frameBuffer !=null && (frameBuffer.getWidth()!=width || frameBuffer.getHeight()!=height )) {
           frameBuffer.dispose();
           frameBuffer=null;
       }

       if(frameBuffer==null){
           try {
               frameBuffer = new FrameBuffer(Pixmap.Format.RGBA8888, width, height, false);
           }catch (GdxRuntimeException e){
               frameBuffer=new FrameBuffer(Pixmap.Format.RGB565,width,height,false);
           }
       }
    }

    @Override
    public boolean keyDown(int keycode) {
        return false;
    }

    @Override
    public boolean keyUp(int keycode) {
        return false;
    }

    @Override
    public boolean keyTyped(char character) {
        return false;
    }

    @Override
    public boolean touchDown(int screenX, int screenY, int pointer, int button) {
        return false;
    }

    @Override
    public boolean touchUp(int screenX, int screenY, int pointer, int button) {
        return false;
    }

    @Override
    public boolean touchDragged(int screenX, int screenY, int pointer) {

        vector3.set(screenX,screenY,0);
        camera.unproject(vector3);
        sprite.setPosition(vector3.x-sprite.getWidth()/2,vector3.y-sprite.getHeight()/2);

        return false;
    }

    @Override
    public boolean mouseMoved(int screenX, int screenY) {
        return false;
    }

    @Override
    public boolean scrolled(int amount) {
        return false;
    }
}

以下是light.png

enter image description here

我的预期输出:

enter image description here