2015-02-23 30 views
1

有一個運行Libgdx的Android應用程序,其中有許多精靈都在浮動。目前,我根據它們屬於哪一組來區別顏色,例如「紅色」,「綠色」,「藍色」等等。但是,我認爲我更喜歡只將部分精靈顏色而不是整個顏色。Libgdx - 動態只着色一部分精靈

目前我使用:

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

batch.end(); 

batch.setColor(color)用於着色的批次和應用,爲整個精靈。當該組完成後,我改變顏色並移至下一組。完成組合後,我重置批次顏色。

是否有着色器/混合器的方式,而不是着色部分的精靈?例如,我的紋理中任何顏色爲的紅色都應被視爲「動態區域」,然後可以將其着色爲我動態設置的任何內容。

我不能使用透明度,因爲紋理的邊緣是透明的,需要保持這種混合方式。

非常感謝

回答

0

您可以在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()); 
    } 
} 
+0

嗨拉拉,謝謝你回到我身邊。你的方法讓你感到困惑。目前,textureregion是我想要顯示的精靈的地圖集的返回部分,假設字符。我將如何去着色這個返回的精靈的一部分?你是否爲該角色的每個部分創建了不同的紋理區域? – Jammo 2015-03-31 09:06:03

+0

是的。你應該在你的地圖集中添加另一個紋理,在紋理上只顯示你想改變顏色的那部分角色。然後創建'MySprite',其中'region1'是字符紋理,'region2'是第二個紋理。不要忘記在渲染之前設置'extraColor'值。 – Rara 2015-03-31 16:20:16

+0

雖然這種方法似乎有相當多的開銷?我有一個已經在8個方向旋轉的精靈,每個方向都有4幀動畫。所以我需要在地圖集中的每一個紋理區域圖像?只是看起來像很多管理員的噩夢,特別是如果主角圖形更新。使用的精靈具有透明度 - 是否無法定位精靈的特定顏色,例如洋紅色,並且只能動態地對該部分進行着色?就像綠色/藍色屏幕如何與電視/電影一起工作 – Jammo 2015-04-02 10:52:12