在XNA中,精灵中矩形宽度和纹理宽度之间的区别是什么?

时间:2013-02-08 13:37:29

标签: xna textures sprite xna-4.0 rectangles

假设您这样做了:spriteBatch.Draw(myTexture, myRectangle, Color.White);

你有这个:

myTexture = Content.Load<Texture2D>("myCharacterTransparent");
myRectangle = new Rectangle(10, 100, 30, 50);

好的,现在我们的矩形宽度为30.假设myTexture的宽度为100。

因此,对于第一行,它是否使精灵的宽度为30,因为这是您设置为矩形的宽度,而myTexture宽度保持为100?或者精灵的宽度是否为100,因为这是纹理的宽度?

1 个答案:

答案 0 :(得分:0)

Draw-method使用的Rectangle定义了应该在rendertarget的哪个部分(通常是屏幕)绘制Texture2D的哪个部分。

这就是我们使用tilesets的方式,例如;

class Tile
{
    int Index;
    Vector2 Position;
}

Texture2D tileset = Content.Load<Texture2D>("sometiles"); //128x128 of 32x32-sized tiles
Rectangle source = new Rectangle(0,0,32,32); //We set the dimensions here.
Rectangle destination = new Rectangle(0,0,32,32); //We set the dimensions here.
List<Tile> myLevel = LoadLevel("level1");

//the tileset is 4x4 tiles

in Draw:
spriteBatch.Begin();
foreach (var tile in myLevel)
{
    source.Y = (int)((tile.Index / 4) * 32);
    source.X = (tile.Index - source.Y) * 32;

    destination.X = (int)tile.Position.X;
    destination.Y = (int)tile.Position.Y;

    spriteBatch.Draw(tileset, source, destination, Color.White);
}
spriteBatch.End();

我可能已经混淆了绘制方法中使用矩形的顺序,因为我在工作时从头顶做这个。

编辑;仅使用“源矩形”可以在屏幕的某个位置仅绘制一块纹理,而仅使用目标可以缩放纹理以适合您想要的任何位置。