代码之家  ›  专栏  ›  技术社区  ›  ThatBrianDude

精灵:只改变不透明的精灵像素为一种纯色

  •  2
  • ThatBrianDude  · 技术社区  · 6 年前

    下面是一个解决方案,它只是用纯色替换整个纹理:

    sprite.texture = PIXI.Texture.WHITE
    

    显然,这不适用于透明精灵。任何透明度最终也都是实心的。(形成实心矩形)

    我怎样才能改变只有非透明像素的精灵的颜色?

    2 回复  |  直到 5 年前
        1
  •  2
  •   mcalus3    5 年前

    据我所知,你不能用皮西。据一位Pixi的维修人员说 here ,您可以使用皮西天堂包装的深色( https://github.com/gameofbombs/pixi-heaven ). 自述文件中列出了这个确切的示例:

    把整个精灵做成一种颜色:

    sprite.tint = 0xffaacc;
    sprite.color.dark[0] = sprite.color.light[0];
    sprite.color.dark[1] = sprite.color.light[1];
    sprite.color.dark[2] = sprite.color.light[2];
    //dont forget to invalidate, after you changed dark DIRECTLY
    sprite.color.invalidate();
    
        2
  •  1
  •   Leftium    5 年前

    你可以申请 custom filter 为精灵干杯。”“过滤器”是 PixiJS's term for a shader .

    1. 从这个开始 custom filter example .
    2. 修改文件着色器.frag使用返回所需颜色或透明的着色器,具体取决于当前像素。
    3. 可选 :以上将从原始精灵中连续计算实体精灵。如果性能有问题,我认为有一种方法可以保存结果并将其设置为精灵的纹理。

    片段着色器应该非常简单。以下是两个很好的片段着色器教程:

        3
  •  0
  •   Czyzby    4 年前

    这是可能的,在纯郫溪与 ColorMatrixFilter :

    let filter = new PIXI.filters.ColorMatrixFilter();
    filter.matrix = [
        10, 10, 10, 10,
        10, 10, 10, 10,
        10, 10, 10, 10,
        -1, -1, -1, 1
    ];
    sprite.filters = [filter];
    

    tint alpha 可能会停止工作,但您可以在此之后添加其他筛选器(例如。 AlphaFilter )达到类似的效果。