Генерация одного Texture2D из нескольких Texture2D - PullRequest
9 голосов
/ 01 октября 2011

Моя проблема в том, что мне нужно представить изменяемый по длине пол, используя Texture2D, что означает пол, у сторон которого есть изображение сторон, а в середине он повторяет то же «среднее» изображение, например: enter image description here

Чтобы добиться этого, я получаю текстуры «левый край», «средний» и «правый край», проблема в том, что я не знаю, как объединить их в одну текстуру 2D,

Важно сделать это во время выполнения, потому что длина пола меняется (по горизонтали), Я читал, что вы можете сделать это с помощью SetData, но я понятия не имею, как ...

Для меня очень важно, чтобы он действовал как одна текстура, а не как несколько частей текстуры, потому что я использую Farseer Physics Engine для перемещения пола и его использования.

Я использую C # и XNA с Visual Studio 2010, я почти опытный программист на C #,

Спасибо!

Ответы [ 3 ]

2 голосов
/ 01 октября 2011

Этот ответ может вам помочь.Либо вы должны использовать HLSL для повторения своего пола, либо вы должны нарисовать свой пол на RenderTarget и сохранить его как одну текстуру.Наслаждаться.

1 голос
/ 01 октября 2011

Вы используете farseer ... но это не запрещает вам использовать метод листов ...

Я не знаю, дальновидный, но я предполагаю, что он предоставляет матрицу преобразования ...

сделать:

Vector2 pos = Vector2.Zero;
spriteBatch.Begin(...,....,...,..., Transform);

spriteBatch.Draw(LeftTexture, pos, null, Color.White);
pos.X += LeftTexture.Width;
for (int i=0; i<floor_repeats; i++)
{
    spriteBatch.Draw(MidleTexture, pos , null, Color.White);
    pos.X += MiddleTexture.Width; 
}
spriteBatch.Draw(RightTexture, pos , null, Color.White);
1 голос
/ 01 октября 2011

Сначала создайте новую Texture2D , которая будет служить текстурой вашего пола, указав соответствующую ширину и высоту. Затем получите данные трех текстур, которые вы хотите объединить, используя метод GetData . Наконец, используйте метод SetData , чтобы настроить данные новой текстуры соответствующим образом (проверьте ссылку, вы можете указать начальный индекс).

Предупреждение: методы GetData и SetData работают медленно. Если вам нужно создать эту текстуру только один раз за игру (например, при инициализации), это не проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...