2017-08-09 128 views
2

我正在嘗試使透明圓圈和黑色與阿爾法周圍的一切。我使用這個代碼,它不知何故無法正常工作。透明圓圈黑色

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

回答

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