美文网首页libGdx专题
LibGdx使用模板测试

LibGdx使用模板测试

作者: 大旺旺的弟弟小旺旺 | 来源:发表于2021-10-08 14:40 被阅读0次

一个图片中显示出一个⚪
1.开始模板测试

config.stencil = 8;   //开启莫把测试

2.绘制

public class SeneTest extends Group {

    private SpineActor spineActor;
    private Cir cir;
    public SeneTest(){
        cir = new Cir(300,300,200);
        addActor(cir);
        spineActor = new SpineActor("spine/countrypic/Australia/Australia");
        addActor(spineActor);
        spineActor.setPosition(20,100, Align.center);
        spineActor.setAnimation("1",true);
    }

    @Override
    public void draw(Batch batch, float parentAlpha) {
        batch.flush();
        Gdx.gl.glEnable(GL20.GL_STENCIL_TEST);
        Gdx.gl.glStencilOp(GL20.GL_KEEP, GL20.GL_KEEP, GL20.GL_REPLACE);//第一次绘制的像素的模版值 0+1 = 1
        Gdx.gl.glStencilFunc(GL20.GL_ALWAYS, 1, 0xFF);
        cir.draw(batch,parentAlpha);
        Gdx.gl.glStencilFunc(GL20.GL_EQUAL, 0x1, 0xFF);//等于1 通过测试 ,就是上次绘制的图 的范围 才通过测试。
        Gdx.gl.glStencilOp(GL20.GL_KEEP, GL20.GL_KEEP, GL20.GL_KEEP);//没有通过测试的,保留原来的,也就是保留上一次的值。
        spineActor.draw(batch,parentAlpha);
        batch.flush();
        Gdx.gl.glDisable(Gdx.gl.GL_STENCIL_TEST);
    }
}

3.cir


public class Cir extends Actor {
    private float centerX;
    private float centerY;
    private float radius;
    private ShapeRenderer sr;

    public Cir(float x, float y, float radius) {
        this.centerX = x;
        this.centerY = y;
        this.radius = radius;
        setPosition(centerX - radius, centerY - radius);
        setSize(radius * 2, radius * 2);
        sr = new ShapeRenderer();
    }

    @Override
    public void act(float delta) {
        super.act(delta);
    }

    @Override
    public void draw(Batch batch, float parentAlpha) {
        super.draw(batch, parentAlpha);
        if (sr != null) {
            batch.end();
            sr.setProjectionMatrix(batch.getProjectionMatrix());
            sr.setTransformMatrix(batch.getTransformMatrix());
            sr.setColor(Color.valueOf("FFFFFF00"));
            sr.begin(ShapeRenderer.ShapeType.Filled);
            sr.circle(centerX, centerY, radius);
            sr.end();
            batch.begin();
        }
    }

    public void setRadius(float radius) {
        this.radius = radius;
    }

    public float getRadius() {
        return radius;
    }
}

效果:


image.png

相关文章

  • LibGdx使用模板测试

    一个图片中显示出一个⚪1.开始模板测试 2.绘制 3.cir 效果:

  • 模板测试

    其实UGUI的Mask,就是使用了模板测试。 什么是模板测试?(Stencil Buffer)如果开启了模板测试,...

  • Shader-模板测试

    模板测试 模板测试在透明度测试之后,在深度测试之前 使用模板缓冲区最重要的两个值:当前模板缓冲值(stencilB...

  • [C++]模板类的使用(Stack)

    模板类的使用 测试类

  • LibGdx做个3D魔方

    目标: 使用Libgdx 3D 旋转 自动解魔方

  • 一套价值500元的企业网站源码

    模板介绍: 页面简洁简单,容易管理,DEDE内核都可以使用;附带测试数据! 模板特点: 企业网站通用模板,简单便捷...

  • 广告设计类网站织梦模板

    模板名称: 广告展厅设计类网站织梦模板 模板介绍: 页面简洁简单,容易管理,DEDE内核都可以使用;附带测试数据!...

  • 20171118 Ansible

    ansible介绍ansible常用模块使用playbooktemplates,模板条件测试和循环迭代roles,...

  • PostProcessing v2快速开始

    安装:如果使用的版本是2018测试版的话,在创建项目时选择使用SRP渲染管线模板可以跳过安装步骤,模板中已经自动安...

  • Vue 组件的使用语法

    最近在做 demo 中,没有使用到组件模板的方式,在学习插槽章节中,测试怎么将模板在本页面使用 在同一个页面中使用...

网友评论

    本文标题:LibGdx使用模板测试

    本文链接:https://www.haomeiwen.com/subject/qmdxoltx.html