Использование spritebatch с base.draw в Microsoft XNA
Мне интересно, если это правильно или это нужно изменить?
Я планирую вызывать их всякий раз, когда я хочу изменить количество плиток, которые я рисую в своем основном коде, или когда я хочу изменить цель рендеринга. По сути, я хочу, чтобы у меня была свобода: дай мне поверхность и верни мне поверхность любого типа. Не беспокоясь о его инициации
Также еще один вопрос в этом моем коде: будет ли поверхность, которую я возвращаю, создавать экземпляр новой копии или мне будет предоставлен тот же экземпляр, который был создан из функции, которая его создала. Спасибо.
Мне также нужно знать, если я вызываю new_texture, тогда я делаю связку spritebatch с этой текстурной поверхностью, затем я решаю, хорошо, теперь я не хочу просто иметь это, я хочу визуализировать его. Когда я вызываю base.draw() после того, как в конце моего цикла рисования изнутри моей функции рисования, что произойдет, когда я вызываю два набора spritebatches перед game.draw(), где spritebatches должны быть визуализированы в одну текстуру поверхности, затем еще один, в определенном порядке? Будет ли испорчен порядок моего рендеринга или это не имеет значения? Есть ли альтернативы этому, я открыт для предложений?
Еще одна проблема, она говорит мне, что графическое устройство имеет нулевое значение, когда я вызываю функцию draw_texture. Я не знаю почему!!!!
Вот код
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
namespace TileEngine
{
class Renderer
{
GraphicsDevice mydevice;
public SpriteBatch spriteBatch;
RenderTarget2D new_texture(int width, int height, RenderTarget2D Mine)
{
Texture2D TEX = new Texture2D(mydevice, width, height); //create the texture to render to
mydevice.SetRenderTarget(Mine); //set the render device to the reference provided
//maybe base.draw can be used with spritebatch. Idk. We'll see if the order of operation
//works out. Wish I could call base.draw here.
return Mine; //I'm hoping that this returns the same instance and not a copy.
}
void draw_texture(int width, int height, RenderTarget2D Mine)
{
mydevice.SetRenderTarget(null); //Set the renderer to render to the backbuffer again
Rectangle drawrect = new Rectangle(0, 0, width, height); //Set the rendering size to what we want
spriteBatch.Begin(); //This uses spritebatch to draw the texture directly to the screen
spriteBatch.Draw(Mine, drawrect, Color.White); //This uses the color white
spriteBatch.End(); //ends the spritebatch
//Call base.draw after this since it doesn't seem to recognize inside the function
//maybe base.draw can be used with spritebatch. Idk. We'll see if the order of operation
//works out. Wish I could call base.draw here.
}
}
}