Texture2d的坐标?

时间:2013-04-27 08:04:32

标签: xna

我知道你可以获得类Texture2d的宽度和高度,但为什么你不能得到x和y坐标?我是否必须为它们创建单独的变量?好像很多工作。

2 个答案:

答案 0 :(得分:1)

您必须使用与Vector2 - 对象关联的Texture2D - 对象。 Texture2D - 对象本身没有任何坐标 当你想绘制纹理时,你需要SpriteBatch来绘制它,而这需要Vector2D来确定坐标。

public void Draw (
     Texture2D texture,
     Vector2 position,
     Color color
)

这取自MSDN

所以,要么创建一个struct

struct VecTex{

    Vector2 Vec;
    Texture2D Tex;

}

或需要进一步处理的课程。

答案 1 :(得分:1)

仅Texture2D对象没有任何屏幕x和y坐标。
为了在屏幕上绘制纹理,您必须使用Vector2或矩形设置它的位置。

以下是使用Vector2的示例:

private SpriteBatch spriteBatch;
private Texture2D myTexture;
private Vector2 position;

// (...)

protected override void LoadContent()
{
    // Create a new SpriteBatch, which can be used to draw textures.
    spriteBatch = new SpriteBatch(GraphicsDevice);

    // Load the Texture2D object from the asset named "myTexture"
    myTexture = Content.Load<Texture2D>(@"myTexture");

    // Set the position to coordinates x: 100, y: 100
    position = new Vector2(100, 100);
}

protected override void Draw(GameTime gameTime)
{
    spriteBatch.Begin();
    spriteBatch.Draw(myTexture, position, Color.White);
    spriteBatch.End();
}

以下是使用Rectangle的示例:

private SpriteBatch spriteBatch;
private Texture2D myTexture;
private Rectangle destinationRectangle;

// (...)

protected override void LoadContent()
{
    // Create a new SpriteBatch, which can be used to draw textures.
    spriteBatch = new SpriteBatch(GraphicsDevice);

    // Load the Texture2D object from the asset named "myTexture"
    myTexture = Content.Load<Texture2D>(@"myTexture");

    // Set the destination Rectangle to coordinates x: 100, y: 100 and having
    // exactly the same width and height of the texture
    destinationRectangle = new Rectangle(100, 100,
                                         myTexture.Width, myTexture.Height);
}

protected override void Draw(GameTime gameTime)
{
    spriteBatch.Begin();
    spriteBatch.Draw(myTexture, destinationRectangle, null, Color.White);
    spriteBatch.End();
}

主要区别在于,通过使用矩形,您可以缩放纹理以适合目标矩形的宽度和高度。

您可以在MSDN找到有关SpriteBatch.Draw方法的更多信息。