【问题标题】:Libgdx - Colouring only part of a sprite dynamicallyLibgdx - 仅动态着色精灵的一部分
【发布时间】:2015-02-23 18:35:27
【问题描述】:

有一个运行 Libgdx 的 Android 应用程序,其中包含许多精灵。目前,我根据它们所属的组对它们进行不同的着色,例如“红色”、“绿色”、“蓝色”等。但是,我认为我更喜欢只为精灵的一部分而不是整个事物着色。

目前我使用:

batch.begin();
batch.setColor(color1);
batch.draw(group1);
batch.setColor(color2);
batch.draw(group2);
etc..

batch.end();

batch.setColor(color) 用于为批次着色并将其应用于整个精灵。该组完成后,我更改颜色并移至下一组。完成组后,我会重置批次颜色。

是否有一种着色器/混合器方式只为精灵的一部分着色?例如,我的纹理中任何颜色为 red 的东西都应该被视为“动态区域”,然后可以将其着色为我动态设置的任何内容。

我不能使用透明度,因为纹理的边缘是透明的,需要保持这种状态才能混合。

非常感谢

【问题讨论】:

    标签: java android libgdx blending spritebatch


    【解决方案1】:

    您可以使用Sprite 中的第二个TextureRegion 来实现此目的。因此,您可以为这个附加区域使用其他颜色。这个其他区域应该只包含会改变颜色和透明背景的图像的一部分。

    public class MySprite extends Sprite {
        TextureRegion region1, region2;
        Color extraColor;
    
        ...
    
        @Override
        public void draw(Batch batch, float parentAlpha) {
            Color color = getColor();
            batch.setColor(color.r, color.g, color.b, color.a * parentAlpha);
            batch.draw(region1, getX(), getY(), getOriginX(), getOriginY(),
                    getWidth(), getHeight(), getScaleX(), getScaleY(), getRotation());
    
            batch.setColor(extraColor);
            batch.draw(region2, getX(), getY(), getOriginX(), getOriginY(),
                    getWidth(), getHeight(), getScaleX(), getScaleY(), getRotation());
        }
    }
    

    【讨论】:

    • 嗨,Rara,感谢您回复我。有点被你的方法弄糊涂了。目前,纹理区域是我要显示的精灵的图集的返回部分,比如说角色。我将如何只为这个返回的精灵的一部分着色?您是否为该角色的每个部分创建不同的纹理区域?
    • 是的。您应该向您的图集添加另一个纹理,在该纹理中仅可见您想要更改颜色的角色部分。然后创建MySprite,其中region1 是字符纹理,region2 是第二个纹理。不要忘记在渲染前设置extraColor值。
    • 这种方法的开销似乎很大?我有一个已经在 8 个方向上旋转的精灵,每个方向都有 4 帧动画。所以我需要在地图集中为每个纹理区域图像?这似乎是很多管理员的噩梦,尤其是在主角图形更新的情况下。使用的精灵具有透明度 - 是否无法针对精灵的特定颜色,例如洋红色,而只能动态着色该部分?就像绿/蓝屏幕如何与电视/电影一起使用
    • 好吧,你应该包括有问题的这些细节 :) 在这种情况下,我可以建议你查看 Pixmap class: libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/… 。您可以使用getColor()drawPixel() 方法实现您想要的。我不确定这是否是最佳解决方案,但它应该可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 2018-03-07
    • 1970-01-01
    相关资源
    最近更新 更多