我今天开始稍微处理着色器,现在我被卡住了。我想将着色器应用于scene2d阶段中的某些actor(Images)。它甚至可能吗? 我只对整个场景有一个绘制方法,但不适用于单个演员或演员组。
在scene2d阶段之外我会做这样的事情:
batch.setShader(shader);
batch.begin();
batch.draw(Image);
batch.end();
batch.setShader(null);
batch.begin();
如何在scene2d环境中实现这一目标?
答案 0 :(得分:2)
您可以在Actor的draw方法中更改着色器,然后将其更改回来(当着色器更改时,Batch会自动处理刷新):
public void draw (Batch batch, float parentAlpha){
batch.setShader(customShader);
batch.draw(...);
batch.setShader(null);
}
请记住,每次执行此操作时,都会导致批次刷新。如果您要使用自定义着色器绘制几十个actor,则应该将它们放在更改着色器的组中,以便仅为该组刷新一次批处理:
//Custom Group:
public void draw (Batch batch, float parentAlpha){
batch.setShader(customShader);
super.draw(batch, parentAlpha);
batch.setShader(null);
}