2016-11-10 1 views
0

Вот ничья блок:SpriteBatch обращается к backbuffer вместо RenderTarget?

graphicsDevice.Clear(Color.CornFlowerBlue); 
spriteBatch.Begin(); 
graphicsDevice.SetRenderTarget(renderTarget); 
spriteBatch.Draw(texture2D, position, etc); 
graphicsDevice.SetRenderTarget(null); 
graphicsDevice.Clear(Color.Red); 
spriteBatch.End(); 

Это производит мой Texture2D сверху на красном фоне. Почему это нарисовало мой Texture2D на экране? Когда spriteBatch.Draw называется RenderTarget, он не является backbuffer, и я не рисую RenderTarget в этом коде. Должна ли текстура2D не отображаться, так как она выведена из экрана? Кроме того, почему ничего не отображается (только черный), если я не очищаю экран до окончания spriteBatch?

ответ

1

Попробуйте организовать исходный код, как это,

graphicsDevice.Clear(Color.CornFlowerBlue); 
graphicsDevice.SetRenderTarget(renderTarget); 
spriteBatch.Begin(); 
spriteBatch.Draw(texture2D, position, etc); 
spriteBatch.End(); 

Из моего опыта вы должны поставить перед собой цель оказать, прежде чем вы на самом деле начать рисовать с спрайтов партии.

Относительно того, почему ваш задний буфер является черным, когда вы сделали это, потому что .SetRenderTarget(null); очищает задний буфер, а также цель рендеринга, поэтому экран черным рисует (ничего). Сначала вы должны сделать весь рисунок RenderTarget, поэтому, когда вы переключаетесь обратно в задний буфер, он ничего не стирает.

+0

Хорошо, но почему очистка GraphicsDevice в моей второй до последней строке приводит к тому, что экран переходит из черного в красный с моей текстурой, нарисованной над ним? – GameKyuubi

+0

Речь идет о заказе вашего кода, вы очищаете и заполняете экран, прежде чем заканчиваете свою рассылку спрайтов, что на самом деле рисует спрайты на экране. – XerShade

+0

Правильно, но в моем коде последнее, что я делаю до того, как End() есть Clear(), но каким-то образом мой Texture2D все еще виден. Он меняет цвет фона, но не удаляет Texture2D. – GameKyuubi