2015-02-22 2 views
0

Когда я сжимаю свою большую текстуру вниз, она не уменьшает изображение. Он просто отсекает изображение, начиная с нижнего правого и поднимаясь по диагонали.Как я могу сжать большую текстуру, чтобы она оставалась центрированной?

Это, как я рисую спрайт:

spriteBatch.Draw(Tiles[0].TileTexture, new Vector2(x * TileWidth, y * TileHeight), Color.White); 

Это базовое изображение я тестирую с.

enter image description here

Это то, что он выглядит на 16,16

enter image description here

И 64,64

enter image description here

+0

Был ли TileWidth и TileHeight такими же, как реальная ширина и высота изображения? –

+0

@ Сильвер Нет. Может быть, я делаю это неправильно. Но когда я делал это раньше, у меня был образ 16x16. И я хочу, чтобы игрок мог увеличить число плиток. Но так как 16,16 настолько мала, что изображение будет выглядеть очень неровным и плохим. Поэтому я подумал, что лучше использовать изображение с более высоким разрешением и просто масштабировать его, поэтому, когда они будут увеличиваться, это будет выглядеть отлично. Разве это не способ сделать это? – ernest

ответ

1

Если вы используете 16x16 изображения, то размер ячейки должен 16 × 16. Но если вы хотите рисовать изображение 64x64 в ячейке 16x16, вы должны масштабировать изображение до 16x16, но в этом случае не будет разницы между исходными изображениями 64x64 и 16x16. Или сделайте ячейки 64x64 пикселей.

Что касается масштабирования, вы можете использовать только целую шкалу, например, 2x, 3x и так далее. Не допускайте нецелого масштаба, чтобы избежать искажения изображения.

SpriteBatch.Draw имеет overloads. Для масштабирования изображения, как вы хотите, вы можете использовать перегрузку 1, 2 или 3 с назначением прямоугольника в качестве второго параметра:

SpriteBatch.Draw(
    tileTexture, 
    new Rectange(x * TileWidth, y * TileHeight, TileWidth, TileHeight), 
    Color.White); 

Исходного изображения будет тянущимся прямоугольник.

Или вы можете использовать на два последних перегрузок в масштаб изображения

SpriteBatch.Draw(
    tileTexture, 
    new Vector2(x * TileWidth * scaleX, y * TileHeight * scaleY), 
    null, 
    Color.White, 
    0, 
    Vector2.Zero, 
    new Vector2(scaleX, scaleY), 
    SpriteEffects.None, 
    0); 

Кроме того, если вам просто нужно заполнить фон с одной же плитками можно назвать SpriteBatch начать Митос с любой оберткой SemplerState paramether (PointWrap лучше, для меня) и нарисуйте черепицу примерно так: SpriteBatch.Draw ( tileTexture, новый Rectange (0, 0, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height), Color.White);

Смежные вопросы