Я не уверен, почему это происходит.
По сути, я рендерил свою карту тайлов на экран, используя Spritebatch с матричным преобразованием, и я получаю эту странную вещь.
Tearing
Обратите внимание, что все выглядит хорошо, когда я рендеринг с использованием Matrix.Identity.
Это код, который я использую для создания матрицы:
#region Создание трансформации
приватная пустота CreateTransformation ()
{
преобразование = Matrix.Identity;
Vector3 screenCenter = new Vector3
(graphics.Viewport.Width * 0.5f, graphics.Viewport.Height * 0.5f, 0f);
transformation *= Matrix.CreateTranslation(-screenCenter);
transformation *= Matrix.CreateScale(zoom);
transformation *= Matrix.CreateTranslation(screenCenter);
transformation *= Matrix.CreateTranslation
(position.X * zoom, position.Y * zoom, 0f);
mustUpdateTransformation = false;
}
#endregion
И вот код, который я использую для запуска SpriteBatch:
ScreenManager.SpriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.None, camera.Transformation);
А вот код, используемый для рендеринга каждой плитки:
public void Draw(SpriteBatch batch)
{
foreach (var layer in MapLayers)
{
foreach (Tile T in layer)
{
batch.Draw(T.SpriteSheet.Texture, T.Position, T.SpriteSheet.SourceRectangle(T.TileIndex), Color.White);
}
}
}
Кто-нибудь знает, что происходит?