如何使用Vector2 {get; set;}来计算正方形的角

时间:2013-01-23 14:57:08

标签: c# xna get set

这是我的第一个问题,我几天前就开始使用C#进行编码了,所以请善待,如果我做了一些愚蠢的事情。问题是,我想在xna中编写一个小型2D游戏,因此我创建了一个带纹理的32x32 px盒子,应该是播放器。我可以使用箭头键来为玩家写一个类,如

namespace MyGame
{
    class Player
    {
        public Texture2D Textur;
        public Vector2 Position { get; set; }
    }
}

然后使用

KeyboardState keyboard = Keyboard.GetState();
if (keyboard.IsKeyDown(Keys.Right)) player.Position += new Vector(5,0);
//and so on

其中5是像素数量,玩家通过一次击键移动。 我正在尝试写的是这样的东西

class Player
{
    public Texture2D Textur;
    public Vector2 Position { get; set; }
    public Vector2 UpperRightCorner = new Vector2(Position.X + 32, Position.Y);
}

但显然它不起作用。甚至以为我在msdn上阅读关于get的文档;组;我真的不明白,它是如何运作的。 我需要角落,或者更准确地说是角落旁边的像素,来编写碰撞方法。每当我按下箭头键时,这个方法应该询问玩家面前是什么类型的等级块,然后调整速度。如果存在实体块(如墙),则将移动设置为0。

任何想法,我怎么能在玩家类中写下这个角落?实例化玩家后,我可以在主类中调用它,但我更愿意将它放入播放器类中。

3 个答案:

答案 0 :(得分:2)

由于您的位置尚未创建,因此无效。

在您的播放器构造函数(例如public Player())中,您必须先将位置设置为new Vector2。例如:

public Player()
{
    Position = new Vector2(0,0);
    UpperRightCorner = new Vector2(Position.X + 32, Position.Y);
}

答案 1 :(得分:1)

您在实例化时为UpperRightCorner分配值。该值将保持不变。这可以使用getter重写,以便在每次访问时重新计算UpperRightCorner。例如:

public Vector2 UpperRightCorner
{
    get
    {
        return new Vector2(Position.X + 32, Position.Y);
    }
}

答案 2 :(得分:1)

Ginosaji的回应应该能满足你的要求。稍作修改,它也可以自动处理您选择的任何尺寸纹理:

public Vector2 UpperRightCorner {
    get {
        return new Vector2(Position.X + Textur.Width, Position.Y);
    }
}