2012-05-12 3 views
0

У меня есть игра на основе плитки. Каждая текстура плитки загружается, а затем я рисую каждый рядом друг с другом, образуя непрерывный фон. Я действительно следовал этому руководству для xml-файлов.XNA - Рисование увеличенных 2D спрайтов

http://www.xnadevelopment.com/tutorials/looksleveltome/looksleveltome.shtml

Источники текстуры являются 50x50.

Тем не менее, он работает только его масштаб 1 (или ниже), если масштаб больше

Результаты: Нормальный размер (50 пикселей и масштаб 1) http://imageshack.us/photo/my-images/525/smallzp.jpg/

большего размера (Увеличенный или 100 пикселей в xml-файле) http://imageshack.us/photo/my-images/577/largeki.jpg/

Мы можем видеть, что между плитами существуют линии, которые не находятся в текстуре. Это на самом деле не так плохо, но в моей игре набора фишек, это то, что он делает: http://imageshack.us/photo/my-images/687/zoomedsize.png/

Тот же эффект присутствует ли увеличение I размер плитки в файле XML, изменить масштаб при рисовании или использовать мою камеру масштабирования.

//zoom code 
public Matrix GetTransformation() 
{ 
    return 
     Matrix.CreateTranslation(new Vector3(-_pos.X, -_pos.Y, 0)) * 
     Matrix.CreateRotationZ(Rotation) * 
     Matrix.CreateScale(new Vector3(Zoom, Zoom, 1)) * 
     Matrix.CreateTranslation(new Vector3(_device.Viewport.Width * 0.5f, _device.Viewport.Height * 0.5f, 0)); 
} 

//draw 
_spriteBatch.Begin(SpriteSortMode.Immediate, 
    BlendState.AlphaBlend, null, null, null, null, 
    _camera.GetTransformation()); 

//for each tile 
theSpriteBatch.Draw(mSpriteTexture, Position, Source, 
    Color.Lerp(Color.White, Color.Transparent, mAlphaValue), 
    mRotation, new Vector2(mSource.Width/2, mSource.Height/2), 
    Scale, SpriteEffects.None, mDepth); 

Есть ли причина для этого? Способ исправить его, чтобы иметь непрерывную текстуру при увеличении?

ответ

1

Проблема заключается в вашем состоянии сэмплера, gpu пытается отобразить цвета рядом с точкой для их интерполяции.

Используйте SamplerState.PointClamp в вашем spriteBatch.Begin(), и он будет исправлен.

+0

Это гений, он работает! Благодаря! – Amaranth