2016-11-18 3 views
0

Я начал разбираться с шейдерами немного сегодня, и теперь я застрял. Я хочу применить шейдер к определенным актерам (Images) на сцене stage2d. Возможно ли это? У меня просто есть метод рисования для всей сцены, но не для отдельных актеров других актер-групп.Установите шейдер для одиночных актеров

Вне scene2d этапе я просто хотел сделать что-то вроде этого:

batch.setShader(shader); 
batch.begin(); 
batch.draw(Image); 
batch.end(); 
batch.setShader(null); 
batch.begin(); 

Как добиться этого в scene2d среде?

+0

Я не уверен, я понимаю, вы правы или нет, но вы можете просто сделать что-то вроде 'stage.draw()' между 'setShader()' вызывает – Eames

+0

Yap, но на этом весь этап, ни один актер – Draz

ответ

1

Вы можете изменить затенение внутри метода жки актера, а затем изменить его обратно (Партия автоматически обрабатывает промывку при шейдер изменяется):

public void draw (Batch batch, float parentAlpha){ 
    batch.setShader(customShader); 
    batch.draw(...); 
    batch.setShader(null); 
} 

Имейте в виду, что каждый раз, когда вы делаете это , это приведет к сбою партии. Если у вас есть несколько десятков актеров, нарисованного с помощью пользовательских шейдеров, вероятно, вы должны поместить их в группе, которая изменяет затенение, поэтому партия только покраснела один раз для группы:

//Custom Group: 
public void draw (Batch batch, float parentAlpha){ 
    batch.setShader(customShader); 
    super.draw(batch, parentAlpha); 
    batch.setShader(null); 
} 
+0

Как изменить метод draw ? – Eames

+0

Не уверен, что вы имеете в виду. Мои примеры выше будут вашими собственными подклассами Актера и Группы, соответственно. – Tenfour04

+0

О, ладно, это то, о чем я думал, я просто не был уверен, что это был правильный способ сделать это – Eames

Смежные вопросы