Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在XNA中将默认原点从左上角更改为中心_C#_Xna - Fatal编程技术网

C# 在XNA中将默认原点从左上角更改为中心

C# 在XNA中将默认原点从左上角更改为中心,c#,xna,C#,Xna,我想知道是否有一种方法可以将原点设置到屏幕的中心 例如,我通常这样做: `原点=新矢量2D(image.height/2,image.width/2) spritebatch.Draw(图像、向量、零、空、颜色、0、原点、无、0)` 现在图像的原点在中间。我希望能够做一个vector.zero并将图像放在屏幕中间,而不做我通常做的事情。这可能吗?这不是坐标系的工作原理,除非你说的是屏幕空间。在这种情况下,整个屏幕映射到[-1,-1](左上)-[1,1](右下)。这没用,所以不要那样做 您需要做的

我想知道是否有一种方法可以将原点设置到屏幕的中心

例如,我通常这样做:

`原点=新矢量2D(image.height/2,image.width/2)

spritebatch.Draw(图像、向量、零、空、颜色、0、原点、无、0)`


现在图像的原点在中间。我希望能够做一个vector.zero并将图像放在屏幕中间,而不做我通常做的事情。这可能吗?

这不是坐标系的工作原理,除非你说的是屏幕空间。在这种情况下,整个屏幕映射到[-1,-1](左上)-[1,1](右下)。这没用,所以不要那样做

您需要做的是使自己成为一个sprite类,在该类中,您可以查找要绘制的sprite(纹理)的原点:

public class Sprite
{
    static Vector2 WorldOrigo = new Vector2(400, 240); //center of a 800x480 screen

    Texture2D Texture { get; set; }
    Vector2 Origin { get; set; }

    public Sprite(Texture2D texture)
    {
        Texture = texture;
        Origin = new Vector2(texture.Width / 2, texture.Height / 2);
    }

    public void Draw(Vector2 position, SpriteBatch spriteBatch)
    {
        spriteBatch.Draw(Texture, WorldOrigo + position - Origin, Color.White);
    }
}
请注意,这只是一个示例。您的精灵可能会有用于动画等的代码