Обычно для трейлов вместо очистки экрана на каждом кадре вы просто рисуете прозрачный прямоугольник размером с экран, прежде чем рисовать текущий кадр.Таким образом, предыдущий кадр является "затемненным" или "размытым по цвету", в то время как новый кадр является полностью "чистым" и "ярким".Поскольку это повторяется, трейл генерируется из всех предыдущих кадров, которые никогда не очищаются, а скорее "затемняются".
Этот метод ОЧЕНЬ эффективен и используется в знаменитой заставке Flurry (www.youtube.com/watch?v=pKPEivA8x4g).
Чтобы увеличить длину трасс, простоувеличьте прозрачность прямоугольника, который вы используете для очистки экрана.В противном случае вы сделаете его более непрозрачным, чтобы сделать след короче.Однако обратите внимание, что если вы сделаете следы слишком длинными, сделав прямоугольник слишком прозрачным, вы рискуете оставить некоторые легкие следы следа, которые из-за альфа-смешивания могут не полностью стереться даже после долгого времени.Заставка Flurry страдает от такого рода артефактов, но есть способы компенсировать это.
В зависимости от вашей ситуации, вам, возможно, придется адаптировать технику.Например, вам может понадобиться несколько слоев для рисования, которые позволяют определенным объектам оставлять след, в то время как другие не генерируют следы.
Этот метод более эффективен для длинных следов, чем попытка перерисовать спрайт тысячи раз.как ваш текущий подход.
С другой стороны, я думаю, что узким местом в вашем коде является следующая строка:
Globals.spriteBatch.Draw(m_texture, getOrigin(), m_rectangle, blend, getAngle(), new Vector2(m_rectangle.Width/2, m_rectangle.Height/2), m_scale, SpriteEffects.None, 0.0f);
Неэффективно иметь тысячи вызовов GPU, таких как Draw (),Было бы более эффективно, если бы у вас был список полигонов в буфере, где каждый полигон расположен в правильном положении и в нем хранится информация о прозрачности.Затем с помощью одиночного вызова Draw () вы можете отрисовать все полигоны с правильной текстурой и прозрачностью.Извините, я не могу предоставить вам код для этого, но если вы хотите продолжить свой подход, это может быть направление, в котором вы движетесь.Короче говоря, ваш графический процессор может рисовать миллионы полигонов за раз, но он не может вызывать Draw () столько раз ...