Это действительно зависит от того, будет ли это 3D или 2D игра, но я думаю, что эти уроки должны охватывать способы выполнения эффектов для:
http://rbwhitaker.wikidot.com/3d-tutorials
http://rbwhitaker.wikidot.com/2d-tutorials
Для трехмерного обнаружения столкновений вы можете использовать BoundingBox объекты для аппроксимации светового цикла, и, возможно, BoundingSphere также может пригодиться.4
EDIT:
Где LightEmitter
- это Вектор2, в котором будет выходить след,
LightTrail
- это Texture2D с шириной светового следа в 1 пиксель,
LastEmitterPos
- это Vector2, показывающий последнюю позицию LightEmitter
, а Trails - это RenderTarget2D, для которого RenderTargetUsage
установлено на RenderTargetUsage.PreserveContents
:
пример Метод рисования:
GraphicsDevice.SetRenderTarget(Trails);
spriteBatch.Begin();
for (float i = 0; i <= (LightEmitter - LastEmitterPos).Length(); i++)
{
Vector2 Pos = Vector2.Lerp(LastEmitterPos, LightEmitter, i/(LightEmitter - LastEmitterPos).Length());
spriteBatch.Draw(LightTrail, Pos, new Rectangle(0, 0, 32, 3), Color.White, MathHelper.ToRadians(90.0f), new Vector2(16, 1.5f), 1.0f, SpriteEffects.None, 1f);
}
spriteBatch.End();
GraphicsDevice.SetRenderTarget(null);
spriteBatch.Begin();
spriteBatch.Draw(Trails, Vector2.Zero, Color.White);
spriteBatch.End();
base.Draw(gameTime);
Здесь нужно несколько глюков и много оптимизации, но я уверен, что это может дать вам хорошее представление о том, в каком направлении двигаться дальше. Или, по крайней мере, немного ободрения, если ничего другого;)