Использование 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.
        }


    }
}

0 ответов

Другие вопросы по тегам