2012-05-31 2 views
1

Я пытаюсь сделать небольшую игру на основе XNA, и мне нужно иметь возможность нарисовать одну текстуру внутри нескольких мобильных кругов вокруг экрана, как если бы они были " прожекторы "раскрывают части большей картины. При поиске того, как я смогу это сделать, я обнаружил, что трафареты могут помочь мне в этом, но я не знаю, как использовать трафареты для этого. Если у кого-то есть какая-либо информация или идеи о том, как я могу это сделать, я был бы очень благодарен.Использование трафаретов в XNA для рисования текстуры в кругах

Редактировать: Я забыл упомянуть, что игра находится в 2D.

ответ

1

Для начала вам понадобится сетка в форме желаемого трафарета, в данном случае круга. XNA не поддерживает многие примитивы, поэтому вам нужно будет приблизиться к кругу с треугольниками.

Далее, вы предоставляете эту сетку почти как обычно, но с:

graphics.DepthStencilState.DepthBufferFunction = CompareFunction.Never; 
graphics.DepthStencilState.StencilEnable = true; 
graphics.DepthStencilState.ReferenceStencil = 1; 
graphics.DepthStencilState.StencilPass = StencilOperation.Replace; 

Теперь у вас есть трафарет с отверстиями.

Затем вы оказываете текстуру через трафарет, с нормальными настройками, но с:

graphics.DepthStencilState.StencilEnable = true; 
graphics.DepthStencilState.ReferenceStencil = 1; 
graphics.DepthStencilState.StencilFunction = CompareFunction.Equal; 

Для получения дополнительной информации см ссылки на DepthStencilState class.

Это основано на моих знаниях о 3D. Возможно, вам придется делать больше вещей, если вы хотите использовать спрайты.

+0

Я забыл упомянуть, что я работаю с 2D-игрой. Используется ли это для 2D? –

+0

Да, я думаю, что да. Тем не менее, я не уверен в том, что нужно сделать буфер трафарета. Для этого может потребоваться некоторый 3D-код. –

+0

Я вижу ... Я буду продолжать изучать его и пытаться заставить его работать с тем, что у меня есть. Благодаря! –

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